黑马程序员技术交流社区

标题: 算出1——100之间素数的3种方法! [打印本页]

作者: 王子墨    时间: 2015-10-3 15:49
标题: 算出1——100之间素数的3种方法!
刚入基础班,以前从来没接触过这东西,每次敲代码都能把自己敲晕,尤其是这次这个算素数,真的把自己绕晕的不要不要的。最后在基友的帮助下终于把思路理成功了!!!
第一种,用for循环嵌套for循环。(我就是敲这个代码把自己敲晕的,最后终于理解了,就又重新取演变了第二种和第三种)但是这种方法取不出2,不知道怎么把2给弄出来:
  1. class sushu{
  2.         public static void main(String[] args)        {
  3.                 for (int a = 2;a <= 100;a++ ) {                   //因为1不是任何数,从2开始
  4.                         for (int y = 2;y < a;y++ ) {           //因为素数可以被自身整除,所以可以排除自身的数,所以y小于a,不用等于a
  5.                                 if (a % y == 0) {     //a%y的值等于0,说明不是素数,就跳出循环。不等于0就不执行本句
  6.                                         break;
  7.                                 }
  8.                                 else if (a == y+1) {        //判断a的值是否等于y加1,因为条件定义y永远小于a的值
  9.                                         System.out.println(a);      //但是y的值循环到比a小1的话,y加上1刚好能相等
  10.                                         break;
  11.                                 }
  12.                                 else {              //如果a%y既不等于0,也不相等,就继续判断,此处可写可不写
  13.                                 
  14.                                 }
  15.                         }
  16.                         
  17.                 }
  18.                  
  19.         }
  20. }
复制代码

第二种,for嵌套while。因为while循环结束后定义的值还能继续使用,而不像for结束后值就被释放了,所以用while可以这样写。
  1. class sushu1{
  2.         public static void main(String[] args)        {  
  3.                 for (int x = 2;x <= 100;x++ ) {                   //因为1不是任何数,从2开始
  4.                         int y = 2;                                         
  5.                         while (x > y) {                                 //如果x大于y 进入循环
  6.                                 if (x % y == 0) {                   //如果x%y等于0,则不是素数,则跳出循环。
  7.                                         break;
  8.                                 }
  9.                                 y++;                                 //否则就是不等于0,y就自增1,然后继续循环
  10.                                 }
  11.                                 if (x == y) {                 //当循环结束就会判断x和y是否相等,相等就说明在循环语句里面一直%不尽,直到超出了判断。
  12.                                 System.out.println(x);
  13.                         }
  14.                
  15.                         
  16.                 }
  17.                  
  18.         }
  19. }
复制代码

第三种,就用一个while循环。本来是用do while实现的,但是发现直接用while代码一样,根本不用变。所以很疑惑do while到底和while有什么区别。
  1. class sushu2 {
  2.         public static void main(String[] args)        {
  3.                         int x = 2,y = 2;
  4.                         while (x <= 100) {                       //x最大到100就停止循环了,但是没有定义y最大值,所以看下面
  5.                                 if (x % y != 0) {                     //如果x%y不等于0,说明y没有磨够
  6.                                         y++;                            //y就自增1
  7.                                         continue;                   //然后continue结束本次循环,回到while处继续循环
  8.                                 }
  9.                                 else if (x == y) {                  //如果x被y磨够了,那么它们肯定是相等的,所以就输出
  10.                                 System.out.println(x);
  11.                                 }
  12.                                 x++;                                  //然后x自增1.接着把y的值重新赋值到2
  13.                                 y = 2;        
  14.                         }


  15.         }
  16. }
复制代码
      思想一乱就好难敲代码了,所以给一起努力学习java的小黑们一个建议,就是每敲一行代码就在后面注释一下,然后自己一旦敲晕了,就看注释,会知道自己卡在哪里了,我一个人默默的算素数的时候就是没有注释,导致自己算了2天才弄懂,绕的自己差点连1+1等于几都得忘记了。

作者: wwf707542865    时间: 2015-10-3 15:55
素数是什么数,我数学是体育老师教的
作者: zhaopengfei    时间: 2015-10-3 16:10
一入java坑,从此节操是路人
作者: 斯文阿昊    时间: 2015-10-3 21:45
总结的真好
作者: 小转铃    时间: 2015-10-3 22:03
感谢楼主提供的思路,学习一下,手动点赞
作者: 哈哈我赢了    时间: 2015-10-3 23:12
学习一下。。。。。
作者: yiranpanda    时间: 2015-10-4 00:06
有学习啦
作者: outxf003    时间: 2015-10-4 11:05
路过,顶一个
作者: meijunwei6275    时间: 2015-10-4 11:06
学习啦                           
作者: 阿萨德豆腐干    时间: 2015-10-4 11:39
看看         
作者: 313098819    时间: 2015-10-4 17:18
不错,很好!
作者: pengwei1989    时间: 2015-10-4 17:30
总结的不错,学习了。
作者: becky_ny    时间: 2015-10-4 18:47
王子墨 发表于 2015-10-3 15:49
刚入基础班,以前从来没接触过这东西,每次敲代码都能把自己敲晕,尤其是这次这个算素数,真的把自己绕晕的 ...

太牛掰了
作者: 前进……    时间: 2015-10-4 18:47
这道题我都没敢做,看别人敲的代码都看不懂,还得多学习啊!
作者: #→_→    时间: 2015-10-4 19:19
楼主,while是先判断再运行,do while是先运行一次再判断是否继续运行,区别还是有的
作者: tianweidong    时间: 2015-10-4 19:43
学习中。。。。。。。。。。。
作者: pan1564335    时间: 2015-10-4 19:45
while和do...while的区别就是后者最少执行一次,而前者不满足一次都不执行
作者: 狮子王    时间: 2015-10-4 19:51
- - 看了二楼我才懂了传说中的素数
作者: asdsy222    时间: 2015-10-4 20:36
太厉害了,已经收藏
作者: Meitan    时间: 2015-10-5 20:33
真厉害,我马上也要去基础班了,好忐忑啊
作者: 王子墨    时间: 2015-10-17 23:37
一晃眼一半课程过去了
作者: Neverlandxu    时间: 2015-10-17 23:38
新人贴,赞一个,
作者: 往事如风555    时间: 2015-10-18 00:08
//程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),
//如果能被整除, 则表明此数不是素数,反之是素数。
public class ShuShu {
        public static void main(String[] args) {
                for (int i = 1; i <= 100; i++) {
                        if (isPrime(i)) {
                                System.out.println(i);
                        }
                }
        }
        // 判断素数的方法,如果是素数,返回true。
        private static boolean isPrime(int n) {
                if (n >= 1 && n <= 3) {
                        return true;
                } else {
                        for (int i = 2; i <= Math.sqrt(n); i++) {
                                if (n % i == 0) {
                                        return false;
                                }
                        }
                }
                return true;
        }
}





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2