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

java求素数,不明白,强烈求解!!!!
import java.*;  
class PrimeNumber 
{
public static void main(String[] args) 
{
int i,j,k=0,n=205;  
for(i=101;i<n;i+=2) 
{
for(j=2;j<(int)(Math.sqrt(i)+1);j++) //这里是什么意思?特别是Math.sqrt(i)+1中的+1
{
if(i%j==0)
{
break;
}
}
if(j>(int)Math.sqrt(i)) //这里又是什么意思?
{
System.out.print(i+" ");
k++;
}
if(k%8==0) System.out.print("\n");  
}
}
}


------解决方案--------------------
Math.sqrt() 方法的解释是:返回正确舍入的 double 值的正平方根。
求素数完全可以这样写..
Java code

public boolean isNumber(int n){
    boolean flag = true;   //判断是不是素数
    for(int i=2; i<n; i++){    //循环除以2 - n之间的数
        if(n % i == 0){        //如果能被其中的某一个数整除
            flag = false;      //将变量改为false
        }
    }
    return flag;   //如果返回是true表示是素数,否则就不是素数
}

------解决方案--------------------
看一下API就知道了

public static double sqrt(double a)返回正确舍入的 double 值的正平方根。特殊情况如下: 
如果参数为 NaN 或小于 0,那么结果为 NaN。 
如果参数为正无穷大,那么结果为正无穷大。 
如果参数为正 0 或负 0,那么结果与参数相同。
否则,结果为最接近该参数值的实际数学平方根的 double 值。 

参数:
a - 一个值。 
返回:
a 的正平方根。如果参数为 NaN 或小于 0,那么结果为 NaN。

for(j=2;j<(int)(Math.sqrt(i)+1);j++) //这里是什么意思?特别是Math.sqrt(i)+1中的+1

因为素数不能被除了1和本本身以外的整数整除,所以这个for循环的作用就是判断i是否能被2--Math.sqrt(i)(一个整数的因子不可能比这个数字更大)之间的整数整除,至于+1的原因是前面用的是小于号,如果是小于等于就不用+1了!