当前位置: 代码迷 >> Java相关 >> java求素数,不明白,强烈求解!该如何解决
  详细解决方案

java求素数,不明白,强烈求解!该如何解决

热度:6632   发布时间:2013-02-25 21:47:26.0
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了!

  相关解决方案