这是使用素数筛法做的输出素数的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);
}
}