日期:2014-05-20  浏览次数:20705 次

这是使用素数筛法做的输出素数的java程序,不知道哪里错了,请大家帮我看一下。如果还有什么可以优化的地方,请一并踢出来啊,呵呵
public class Prime {

public static int main(String[] args) {

//Scanner input = new Scanner(System.in);
//System.out.print("\n请输入判断的值: ");
//int result = input.nextInt();

boolean prime[]=new boolean[31];//[result+1];
int i,j;

for( i=2;i<30;i++)
{
if(i%2==0)
prime[i]=true;
else
prime[i]=false;
}
for(i=3;i<Math.sqrt(30);i+=2){
if(prime[i])
for(j=i+i;j<=30;j+=i)
prime[j]=false;

//System.out.print(i);
}
for(i=2; i<=30; i++)
{if(prime[i]) 
System.out.print(i+"\t");
}
return 0;
}
}


------解决方案--------------------
LZ的代码有点问题 .
我写了一个 速度来说不是最快的一个.
public class prime {
public static void sieve (int n)
{
int count = (int)Math.sqrt(n);
int i,k;
boolean[] a = new boolean[n+1];
for(i = 2;i<=n;i++ ) a[i] = true;
for(i = 2;i<=count;i++)
if ( a[i] ) //i是素数 那么将i的倍数都筛掉
for ( k = i*i; k <= n; k+= i) {
a[k] = false;
}
count = 0;
for (i = 2;i <=n;i++)
if (a[i]) System.out.print(i+"->");
}

public static void main(String[] args) {
sieve(100);

}

}
------解决方案--------------------
LZ的代码 这里有问题
for( i=2;i<30;i++)
 {
 if(i%2==0)
 prime[i]=true; //能被2整数 说明不是素数
 else
 prime[i]=false;
 }
应该改成这样
prime[2] = true;
for( i=3;i<30;i++)
 {
 if(i%2==0)
 prime[i]=false;
 else
 prime[i]=true;
 }

------解决方案--------------------
Java code


public class Prime {
    private final static int n = Integer.MAX_VALUE/100;
    private final static boolean[] pt = new boolean[n];
    public Prime(){
        pt[0] = true;
        pt[1] = true;
        for(int i = 2; i*i < n; i++){
            if ( !pt[i]) {
                for (int j = i; i*j < n; j++){
                    if (!pt[i*j]){
                        pt[i*j] = true;
                    } 
                }
            }
        }
    }
    public void showPrimes(int n){ //输出 [1,n]中所有的素数
        for(int i = 2; i <= n; i++){
            if(!pt[i]){
                System.out.print(i+" ");
            }
        }
        System.out.println();
    }
    public static void main(String[] args){
        Prime p = new Prime();
        p.showPrimes(100);
    }
}