黑马程序员——java 素数计算方法
2014-09-23 16:43
204 查看
------------------android培训、java培训、 java学习型博客、期待与您交流
-------------------------
今天花了一整天的时间在研究java中素数计算的方法,终于给彻底弄懂了!首先,先看看我上午写的错误代码
当时真是糊涂了,脑子里的思路就是,素数,就是看这个数除以2一直到这个数的一半(开方更准确,我习惯直接除2了),如果都不能整除,则这个数就是素数,抱着这个思路,就写出了if。。。else。。。其实,错也就错在这了。
if语句判定不是素数,跳出循环,可以!但如果一个数刚开始不能被2 整除,就直接执行else语句判定它是素数,太武断了!(101到200这几个数很巧,我这个程序凑巧判断出来了)而且,我的结果输出一个数好几次,因为else在内层循环里,一直执行。
研究这个错误研究半天,知道错那了,可也不会写这个题了,参考网上的代码
,结果发现,好多作者犯了和我一样的错误,挑一个典型说一下:
理解了作者的结题思路。感觉自己应该想不到,就又研究了一种思路
判断素数的方法还有很多,今天我算是学到了,也知道for循环魅力无穷,但稍不留神,就一错千里了!
-------------------------
今天花了一整天的时间在研究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循环魅力无穷,但稍不留神,就一错千里了!
相关文章推荐
- C与Java中计算程序执行时间的方法
- c与java中计算程序执行时间的方法
- Java中的时间格式化和时间计算的方法
- java 日期天数计算的一些常用方法
- JAVA对double或者float的浮点数精度计算控制方法
- JAVA中计算百分比和解析时间的方法
- 黑马程序员_一道java选择题 引发: 类的创建和自身构造方法 加载的先后顺序
- C++计算大量素数经典方法
- C++计算大量素数经典方法
- 黑马程序员-java中静态变量,方法的使用实例
- JAVA对double或者float的浮点数精度计算控制方法
- C与Java中计算程序执行时间的方法
- 标准计算答案(java)-使用方法
- 黑马程序员-Java反射--用反射方式执行某个类中的main方法
- java对象占用内存大小计算方法
- java时间日期计算方法
- java计算两数百分比方法
- Java 对double或者float的浮点数精度计算控制方法
- java计算两数百分比方法
- Java程序计算各种对象所占内存的大小的方法