一个用筛法求质数的程序 n是范围,中间计算了筛选时间import java.util.*; public class sieve { public static final boolean PRINT =true;
public static void main(String[] s) { int n = 1000; long start = System.currentTimeMillis(); BitSet b = new BitSet(n); int count = 0; int i; for (i = 2;i<=n;i++) b.set(i); i = 2; while (i*i<=n) { if (b.get(i)) { if (PRINT) System.out.print(i+" "); count++; int k = 2*i; while(k <= n) { b.clear(k); k += i; } } i++; } while (i <= n) { if(b.get(i)) { if(PRINT) System.out.print(i+" "); count++; } i++; } long end = System.currentTimeMillis(); System.out.println(count + " primes"); System.out.println((end - start)+" milliseconds"); } }
to dynku(随风来去) : 你的PROG太烦!这种小东东不用太求什么算法! 简单易懂最好! ////////////////////////////////////////////////////////class exp1 {
n是范围,中间计算了筛选时间import java.util.*;
public class sieve
{
public static final boolean PRINT =true;
public static void main(String[] s)
{
int n = 1000;
long start = System.currentTimeMillis();
BitSet b = new BitSet(n);
int count = 0;
int i;
for (i = 2;i<=n;i++)
b.set(i);
i = 2;
while (i*i<=n)
{
if (b.get(i))
{
if (PRINT) System.out.print(i+" ");
count++;
int k = 2*i;
while(k <= n)
{
b.clear(k);
k += i;
}
}
i++;
}
while (i <= n)
{
if(b.get(i))
{
if(PRINT) System.out.print(i+" ");
count++;
}
i++;
}
long end = System.currentTimeMillis();
System.out.println(count + " primes");
System.out.println((end - start)+" milliseconds");
}
}
你的PROG太烦!这种小东东不用太求什么算法!
简单易懂最好!
////////////////////////////////////////////////////////class exp1
{
public static void main(String args[])
{
int n=1000,k=1;
System.out.println("MY program:");
for(int i=2;i<=n;i++)
{
boolean isPrimeNumber=true;
for(int j=2;j<=i-1;j++)
if(i%j==0){isPrimeNumber=false;break;}
if(isPrimeNumber){System.out.print(i+",");k++;}
if(k%10==0){System.out.println("");k=1;}
}
System.out.println("");
}
}
1),先除去偶数。
2),凡不是质数,它可以被 2-->它的开方数 整除。class GetQuery
{
public static void main(String[] args)
{
int m_quart,j;
for(int m=3;m<1000;m += 2)
{
m_quart = (int)(Math.sqrt((double)m));
for(j=3;j < m_quart;j += 2)
{
if((m%j)==0) break;
} if(j > m_quart) System.out.print("\tquery = " + m); }
}
}我的上述方法可能太费时,请高手们指点。
我不是高手!但我想说一下!
其实你有机会看看印度人写的CODE!
人家的代码虽然没有上二楼那样复杂的算法!
但人家的代码我们一看易能懂!
你说你喜欢哪种!
其实现在硬件的更新速度这么快!
在大多数时候根本不用太担心效率的问题!
关键在于你的代码的稳定性|!