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); }}