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

新手,,弱弱地问,我的程序里面怎么用上Math.sqrt得到的结果不正确呢??求教各路大虾。。。
我这是求从2到输入数N之间的质数并输出,,,

import java.io.*;


public class I{
public static void main(String[] args)throws IOException{
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
String str;

System.out.print("请输入整数:");
str=br.readLine();
int a=Integer.parseInt(str);
for(int i=3; i<=a; i++)
if(prim(i))
System.out.print(i +" ");
}
public static boolean prim(int n){


if(n<=2) return false;
for(int i=2; i<Math.sqrt(n); i++) /*在这个位置用Math.sqrt()得到的结果不对,换为N是正确的,,,求教,,,,*/
if(n%i==0)
return false;
return true;

}

}

------解决方案--------------------
i<Math.sqrt(n); 这地方确实有问题,别如说9,i==2时不能整除,i==3时,9开平方是3,3<3为false,就不会判断余数是否为0了。
其实sqrt方法返回的是double类型,可能的话最好还是用int计算,i*i<=n;