public ? class ?Prime? {
????
public ? static ? void ?main(String[]?args)? {
????????
long ?timeStart? = ?System.currentTimeMillis();
????????
int []?prime_array? = ? new ? int [ 10000 ]; // 用來保存10萬以下的質數(共9592個)
????????prime_array[ 0 ] = 3 ;
????????prime_array[
1 ] = 5 ;
????????
int ?i,primeId =- 1 ,m = 2 ,prime;
????????
// System.out.println(2); // 質數2直接打出^_^
???????? for ?( int ?a? = ? 3 ;?a? <= ? 100000 ;?a? += ? 2 )? {
????????????
if (m * m < a) {
????????????????
// 避免使用sqrt()
????????????????m ++ ;
????????????}

????????????
for ?(i = 0 ;(prime = prime_array[i]) <= m;i ++ )? {
????????????????
if ?(a? % ?prime? == ? 0 )? {
????????????????????
break ;
????????????????}

????????????}

????????????
if ?(prime > m)? {
????????????????prime_array[
++ primeId] = a;
????????????????
// 10萬以下的質數存起
????????????????
// System.out.print(a+"?");
????????????}

????????}

????????System.out.println(
" 計算10萬以下的質數(共 " + (primeId + 2 ) + " 個)耗時 " + (System.currentTimeMillis() - timeStart) + " 毫秒. " );
????????
int ?maxNum = 100000000 ;
????????
for ( int ?a? = ? 100001 ;?a? <= ?maxNum;?a? += ? 2 ) {
????????????
if (m * m < a) {
????????????????
// 避免使用sqrt()
????????????????m ++ ;
????????????}

????????????
for ?(i = 0 ;(prime = prime_array[i]) <= m;i ++ )? {
????????????????
if ?(a? % ?prime? == ? 0 )? {
????????????????????
break ;
????????????????}

????????????}

????????????
if ?(prime > m)? {
????????????????
++ primeId;
????????????????
// System.out.print(a+"?");
????????????}

????????}

????????System.out.println(maxNum
+ " 以下共 " + (primeId + 2 ) + " 個質數. " );
????????System.out.println(
" 耗時 " + (System.currentTimeMillis() - timeStart) + " 毫秒. " );
????}

}