黑马程序员技术交流社区

标题: 求3位数的质数,有哪些,打印出来 [打印本页]

作者: 姜群    时间: 2015-8-29 00:10
标题: 求3位数的质数,有哪些,打印出来
我的想法是遍历100到999,然后除以2到99之间的数,如果有可以给它整除的就不是质数,但是写成代码数值就是不对,求思路
作者: 13414309233F    时间: 2015-8-29 00:23
我也很想知道,求大神分享!!!!!
作者: 牛小爽    时间: 2015-8-29 00:38
public void getZhiShu(){
                List<Integer> zhishuList = new ArrayList<Integer>();
                for (int i = 100; i < 1000; i++) {
                        int factors = 0;

                        for (int j = 2; j < Math.sqrt(i) + 1; j++) {
                                if (i % j == 0) {
                                        factors++;
                                }
                        }
                        if (factors == 0) {
                                zhishuList.add(i);
                        }
                }
                for (int k = 0; k < zhishuList.size(); k++) {
                        System.out.println(zhishuList.get(k) + "\t");
                }
                System.out.println("总个数为:" + zhishuList.size());
        }


还有一个帖子:http://bbs.itheima.com/thread-175474-1-1.html

作者: T-l-H、小生    时间: 2015-8-29 00:43
老题目了·~~
作者: sunsteam    时间: 2015-8-29 00:54
我开班前在家自学写过一个类似的1-500内质数排序的 发出来给大家参考下  因为是刚看到面向对象的时候写的, 没有用到任何高级功能  写的也不优化   但是可以满足你的需要  只要加一个>100的判定就行了

  1. /**
  2. 需求:1-500以内的质数从大到小排序
  3. 思想:先整理质数保存到数组B,然后排序
  4. */

  5. class  Sorting
  6. {
  7.         void print(int[] b)//打印
  8.         {
  9.                 System.out.print("{");
  10.                 for (int t=0;t<b.length-1 ;t++ )
  11.                 {
  12.                         System.out.print(b[t]+",");
  13.                 }
  14.                 System.out.println(b[b.length-1]+"}");
  15.         }
  16.         int[] sort(int[] b)//冒泡排序
  17.         {
  18.                 for (int x=0;x<b.length-1 ;x++ )
  19.                 {       
  20.                         for (int y=0;y<b.length-1-x && b[y]<b[y+1] ;y++ )
  21.                         {       
  22.                                 change(b,y,y+1);
  23.                         }
  24.                 }
  25.                 return b;
  26.         }

  27.         void change(int[]r,int a, int b)//置换位置
  28.         {
  29.                 int temp;
  30.                 temp=r[a];
  31.                 r[a]=r[b];
  32.                 r[b]=temp;
  33.         }

  34.         int[] choose(int[] a)//返回质数数列
  35.         {
  36.                 int i=0;//非质数数字的计数值
  37.                 for (int x=500;x>=1 ;x-- )//遍历1-500,清空数组中的非质数
  38.                 {
  39.                         out: for (int y=2;y<=x/2 ;y++ )//模数循环
  40.                         {
  41.                                 if (x%y==0)         //如果x能被除2到x/2的任何数整除,则x不是质数,
  42.                                 {
  43.                                         a[x-1]=-1;      //将所有不是质数的值赋值为-1
  44.                                         i++;
  45.                                         break out;      //如果能被整除一次代表非质数,跳出到下一个数开始循环
  46.                                 }
  47.                         }
  48.                 }
  49.                 a[0]=-1;// 数字1不是质数,手动赋值
  50.                 int[] b=new int[500-i-1];//创建质数数组b,总数为500减去非质数的数值再减去1
  51.                 int index=0;
  52.                 for (int x=1;x<=500 ;x++ )//将a数组剩余的质数赋值到b
  53.                 {
  54.                         if (a[x-1]!=-1)
  55.                         {
  56.                                 b[index]=a[x-1];
  57.                                 index++;
  58.                         }
  59.                 }
  60.                 return b;
  61.         }

  62.         int[] add(int[] a)
  63.         {
  64.                 for (int x=0;x<a.length ;x++ )//为数组赋值1-500
  65.                 {
  66.                         a[x]=x+1;
  67.                 }
  68.                 return a;
  69.         }

  70.         public static void main(String[] args)
  71.         {
  72.                 int[] init=new int[500];
  73.                 Sorting array =new Sorting();
  74.                 init = array.add(init);
  75.                 int[] s = array.choose(init);
  76.                 init = null;//清空原始数组
  77.                 array.sort(s);
  78.                 array.print(s);
  79.                
  80.         }
  81. }
复制代码

作者: 疯疯疯疯疯子    时间: 2015-8-29 01:42
路过!!!
作者: jaunce    时间: 2015-8-29 06:57
不错。默默的学习一下
作者: 嗯十一点晚安    时间: 2015-8-29 07:56
sunsteam 发表于 2015-8-29 00:54
我开班前在家自学写过一个类似的1-500内质数排序的 发出来给大家参考下  因为是刚看到面向对象的时候写的,  ...

写的好复杂啊,看不懂啊
作者: crosam    时间: 2015-8-29 08:25
新手路过,大神指导!
作者: Hi,2015    时间: 2015-8-29 09:04
这个应该是非常基础的题目啊
作者: yanglingui    时间: 2015-8-29 09:26
1.三位数范围是101到999\
作者: yanglingui    时间: 2015-8-29 09:28
for(int i =101; i<=999;i+=2){}
作者: 姜群    时间: 2015-8-29 10:35
yanglingui 发表于 2015-8-29 09:28
for(int i =101; i

我感觉是100到999,但是后面用的是for嵌套用if和%来判断是否整除,我的困惑是,嵌套的话会从内循环开始到结束都除一次啊我想要在内循环中找到一个数是可以给它整除的,然后跳出内循环,我的思路是不是错的,求思路
作者: yanglingui    时间: 2015-8-29 13:01
for(int i = 101;i<=999;i+=2){
     for(k=2;k<i;I++){if(i%k!=0){sop(i)}}
}
}
作者: yaochaoyang    时间: 2015-8-29 13:24
for循环嵌套,再用if来判断是否整除,在计数
作者: 姜群    时间: 2015-8-29 20:25
yanglingui 发表于 2015-8-29 13:01
for(int i = 101;i

为什么i自加2啊,如果打印放在嵌套循环里,i取一个值,但是有好几个值可以整除他,这样不就会吧那个数打印好几次嘛

作者: Wqi    时间: 2015-8-29 21:07
  1. sum = 0;
  2.                 int m;
  3.                 int count = 0;
  4.                 w : for (i = 2;i < 100 ;i++ ) {
  5.                         m =(int)Math.sqrt(i);
  6.                         for (int x = 2;x <= m ;x++ ) {
  7.                                 if(i % x == 0) {
  8.                                         continue w ;
  9.                                 }       
  10.                                
  11.                         }
  12.                         System.out.println(i); //打印1-100之间的素数
  13.                         count ++;
  14.                         sum +=i;
  15.                                        
  16.                 }
  17.                 System.out.println("1-100之间的素数有:" + count + "个");
  18.                 System.out.println("1-100之间的素数和:" + sum);
  19.         }


  20. 该下for循环的起点和判断条件~~
复制代码

作者: Wqi    时间: 2015-8-29 21:09
姜群 发表于 2015-8-29 20:25
为什么i自加2啊,如果打印放在嵌套循环里,i取一个值,但是有好几个值可以整除他,这样不就会吧那个数打 ...

i+2是为了跳过所有的偶数
作者: zhangzhiyao    时间: 2015-8-29 21:11
这个比较复杂,慢慢搞吧




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