黑马程序员技术交流社区

标题: 菜鸟代码: 1 -100的素数及每行5个 [打印本页]

作者: Feboam    时间: 2016-4-4 00:15
标题: 菜鸟代码: 1 -100的素数及每行5个
新手入门   菜鸟代码: 菜鸟虽菜  ..........
class Work71 {
        public static void main(String[] args) {
                int x = 0;                    
                int y = 0;
                int a = 0;            
                for ( x = 2;x <=100 ;x++ ) {          //1 - 100的数
                                int c = 0;                    //计数 初始化
                        for (y = 1;y <=x ;y++ ) {         //
                         if (x % y==0) {               
                                         c++;                  //记录能被 x整除的个数
                         }
                                 if (c==2&&y==x) {        //   输出素数   
                                         System.out.print(x+"\t");
                                         a++;           //记录素数的个数
                                 }
                                 if (a % 5==0&&y==x) {    //每满5个素数就在第五个素数后面转行
                                                 System.out.println();
                                 }
                        }
                }
                 System.out.println(a);
        }
}

作者: yaolv7    时间: 2016-4-4 01:38
本帖最后由 yaolv7 于 2016-4-4 13:20 编辑

分析:
                1、2是最小的,也是唯一的偶数素数,所以,除了2以外的所有偶数都可以排除
                2、大于1的,并且只能被1和其本身整除的数叫素数,所以,当一个大于1的整数,
                   模以小于它的所有奇数等于0时 , 如果这个整数和它本身相等,那么这个整数就是素数。
  1.         public static void print(int a){
  2.                                 int j;
  3.                                 int count = 1;
  4.                                 System.out.print(2 + "\t" );

  5.                                 for (int i = 3; i < a; i+=2) {
  6.                                         for ( j = 3; j < i; j+=2) {
  7.                                                 if (i % j == 0)
  8.                                                         break;
  9.                                         }
  10.                                         if (j == i) {
  11.                                                 System.out.print(i + "\t");
  12.                                                 count++;
  13.                                                 if(count % 5 == 0)
  14.                                                         System.out.println();
  15.                                         }
  16.                                 }
  17.                         }
复制代码



同菜鸟
作者: yaolv7    时间: 2016-4-4 01:46
  1. for( int i; i < 10; a++) {
  2.    //int i直接写里面就行了, 不用在外面
  3. }
复制代码

  1. for(初始化表达式;条件表达式;循环后的操作表达式)  {
  2.                         循环体;
  3.           }
复制代码


作者: Feboam    时间: 2016-4-4 08:18
yaolv7 发表于 2016-4-4 01:46

厉害受教了
作者: TwooMoore    时间: 2016-4-4 08:55
自己弄了一下,可以的
作者: Feboam    时间: 2016-4-4 10:30
TwooMoore 发表于 2016-4-4 08:55
自己弄了一下,可以的

自己弄得清楚很多  看别人的在自己打   理解了 感觉下次还是有问题
作者: Feboam    时间: 2016-4-4 10:32
路过的朋友 拿个路费再走
作者: 菊花爆满山    时间: 2016-4-4 10:37
代码有点乱啊,内部循环判断是否是素数改成从2到sqrt(x)更好
作者: 253663946    时间: 2016-4-4 11:56
就这个题目难啊!
作者: yaolv7    时间: 2016-4-4 13:48
本帖最后由 yaolv7 于 2016-4-4 22:10 编辑

感觉这样更好


  1. public static void printPrimeNumber(int a){
  2.                         
  3.                         System.out.print(2 + "\t" );                        //2是唯一的偶数素数,先打印
  4.                         int count = 1;                                                        //定义计数器

  5.                         outer: for (int i = 3; i < a; i+=2) {
  6.                                 for (int j = 3; j < i; j+=2) {
  7.                                         if (i % j == 0)
  8.                                                 continue outer;            //区别
  9.                                 }        //内循环结束
  10.                                 System.out.print(i + "\t");
  11.                                        
  12.                                 count++;
  13.                                 if(count % 5 == 0)
  14.                                         System.out.println();
  15.                                 
  16.                         }        //外循环结束
  17.                         System.out.println("\n" + a + "以内的素数一共有:" + count + "个")
  18.                 }
复制代码

作者: Feboam    时间: 2016-4-4 20:43
yaolv7 发表于 2016-4-4 13:48
感觉这样更好

还没学多久 所以有些东西不很熟悉是
作者: yaolv7    时间: 2016-4-4 22:09
Feboam 发表于 2016-4-4 20:43
还没学多久 所以有些东西不很熟悉是

这完全就是用基础前4天的内容就能写出来的,我也才学4天的内容...
作者: Feboam    时间: 2016-4-4 22:16
yaolv7 发表于 2016-4-4 22:09
这完全就是用基础前4天的内容就能写出来的,我也才学4天的内容...

逗我 你那个调用了方法      哈哈      先前不懂什么计数器 没经验
作者: Feboam    时间: 2016-4-4 22:17
菊花爆满山 发表于 2016-4-4 10:37
代码有点乱啊,内部循环判断是否是素数改成从2到sqrt(x)更好

额 新手刚刚上手    多多包涵   
作者: Feboam    时间: 2016-4-4 22:21
253663946 发表于 2016-4-4 11:56
就这个题目难啊!

额  我傻傻的想了  一上午 才 弄清楚   
1. 要对素数有概念  (我知道什么 是素数  确没想到 还有素数多是奇数)
2.我的方法    对for循环和if语句要熟练才行    经过一上午我是有点熟练了
作者: ambition1    时间: 2016-4-4 22:53
厉害厉害!受教了!
作者: Feboam    时间: 2016-4-4 23:03
ambition1 发表于 2016-4-4 22:53
厉害厉害!受教了!

我必胜  你是怎么找到我的这么久了
作者: yaolv7    时间: 2016-4-4 23:29
Feboam 发表于 2016-4-4 22:16
逗我 你那个调用了方法      哈哈      先前不懂什么计数器 没经验

方法调用就是第4天学的呢,哥们,少看视频,多敲代码,
那什么,键盘敲烂,月薪过万
作者: BackingAlongRay    时间: 2016-4-4 23:43
yaolv7 发表于 2016-4-4 01:46

这个题方法实在是多
作者: Feboam    时间: 2016-4-5 00:05
yaolv7 发表于 2016-4-4 23:29
方法调用就是第4天学的呢,哥们,少看视频,多敲代码,
那什么,键盘敲烂,月薪过万 ...

额确实  
作者: Feboam    时间: 2016-4-5 00:07
BackingAlongRay 发表于 2016-4-4 23:43
这个题方法实在是多

嗯嗯   只要自己想滴  就能说明理解这知识点了    晚安咯
作者: zhang3216858    时间: 2016-4-5 00:16
这得回去重新复习了我,乍一看居然没有头绪
作者: lvlup200    时间: 2016-4-5 00:46
  1. package test;

  2. public class Test3 {

  3.         /**
  4.          * @param args
  5.          */
  6.         public static void main(String[] args) {
  7.                 boolean flag;
  8.                 int a = 100;
  9.                 int count = 0;
  10.                 for (int i = 1; i <= a; i++) {
  11.                         flag = isPrime(i);
  12.                         if (flag) {
  13.                                 System.out.print(i + "\t");
  14.                                 count++;
  15.                                 if (count % 5 == 0)
  16.                                         System.out.println();
  17.                         }
  18.                 }
  19.         }

  20.         /*
  21.          * 素数:只能被1和该数本身整除的数
  22.          * 分析:只要不能被整除,也就是使用%运算符得到的结果等于0, 就不是素数
  23.          */
  24.         public static boolean isPrime(int a) {
  25.                 /*
  26.                  * 算到该数平方根就可以了
  27.                  * 为什么是平方根?
  28.                  * 假设数    a = m * n 且 m <= n;(m 和 n 就是它的两个解,也就是2个实数根)
  29.                  *        则     m * m <= m * n;
  30.                  *            √m*m  <=  √m*n;
  31.                  *                m <= √a ;
  32.                  *        所以,只需要求从2到√a之间的所有值就可以了
  33.                  */
  34.                 //遍历从2至a的平方根的所有数
  35.                 for (int i = 2; i <= Math.sqrt(a); i++) {
  36.                         //如果有值能够整除a,则不是素数
  37.                         if (a % i == 0) {
  38.                                 return false;
  39.                         }
  40.                 }
  41.                 //如果知道遍历完都没有找到该值,则该数就是素数
  42.                 return true;
  43.         }
  44. }
复制代码





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