您的位置:首页 > 职场人生

黑马程序员——java 素数计算方法

2014-09-23 16:43 204 查看
------------------android培训java培训、 java学习型博客、期待与您交流
-------------------------

今天花了一整天的时间在研究java中素数计算的方法,终于给彻底弄懂了!首先,先看看我上午写的错误代码

public static void main(String[] args){
for(int i=101;i<=200;i++){
for(int j=2;j<i/2;j++){
if(i%j==0)
break;
else
System.out.println(i);
}
}
}
}


当时真是糊涂了,脑子里的思路就是,素数,就是看这个数除以2一直到这个数的一半(开方更准确,我习惯直接除2了),如果都不能整除,则这个数就是素数,抱着这个思路,就写出了if。。。else。。。其实,错也就错在这了。

if语句判定不是素数,跳出循环,可以!但如果一个数刚开始不能被2 整除,就直接执行else语句判定它是素数,太武断了!(101到200这几个数很巧,我这个程序凑巧判断出来了)而且,我的结果输出一个数好几次,因为else在内层循环里,一直执行。

研究这个错误研究半天,知道错那了,可也不会写这个题了,参考网上的代码
,结果发现,好多作者犯了和我一样的错误,挑一个典型说一下:

import java.io.*;
class sa {
public static void main(String []args) throws  IOException {
int i,j;
String a;
BufferedReader str=new BufferedReader(new InputStreamReader(System.in));
System.out.println("请输入一个数");
a=str.readLine();
int b=Integer.parseInt(a);
if (b==2) {
System.out.println("是质数");
return;
}
double  sqr=Math.sqrt(b);
long tt=Math.round(sqr);
for(i=2;i<=tt;i++) {
if (b%i==0){
System.out.println("不是质数");
break;
}else {
System.out.println("是质数");
break;
}
}
}
先不说代码很复杂了,输入105,显示105是质数!犯了和我一样的错误!具体就不说了。看到一位作者的正确的代码,思路很奇妙:

public class qisi {
public static void main(String[] args) {
int sum = 0;
for (int i = 101; i <= 200; i++){
for (int j = 2; j <= i; j++) {
if (i % j == 0 && i == j) {
sum++;
System.out.println(i);
} else if (i % j == 0 && i != j)
break;
}
}
System.out.println("101-200 之间有:"+sum+"个素数");
}
}


理解了作者的结题思路。感觉自己应该想不到,就又研究了一种思路

public class sushu {
public static void main(String[] args){
for(int i = 101;i<200;i++){
int n=0;
for(int j=2;j<=i/2;j++){
if(i%j==0)
n=n+1;
}
if(n==0)
System.out.println(i);
}
}
}
就是内层for循环与外层for循环之间定义一个变量n,在内层for循环中,如果i%j等于0.n自增,最后判断n的值,如果n等于0,就说明i是素数,相比之下,感觉自己的算法,更简单点。

判断素数的方法还有很多,今天我算是学到了,也知道for循环魅力无穷,但稍不留神,就一错千里了!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: