A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

我的想法是遍历100到999,然后除以2到99之间的数,如果有可以给它整除的就不是质数,但是写成代码数值就是不对,求思路

19 个回复

倒序浏览
我也很想知道,求大神分享!!!!!
回复 使用道具 举报
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
回复 使用道具 举报
老题目了·~~
回复 使用道具 举报
我开班前在家自学写过一个类似的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 13:03
回复 使用道具 举报
路过!!!
回复 使用道具 举报
jaunce 来自手机 中级黑马 2015-8-29 06:57:26
7#
不错。默默的学习一下
回复 使用道具 举报
sunsteam 发表于 2015-8-29 00:54
我开班前在家自学写过一个类似的1-500内质数排序的 发出来给大家参考下  因为是刚看到面向对象的时候写的,  ...

写的好复杂啊,看不懂啊
回复 使用道具 举报
crosam 中级黑马 2015-8-29 08:25:44
9#
新手路过,大神指导!
回复 使用道具 举报
这个应该是非常基础的题目啊
回复 使用道具 举报
1.三位数范围是101到999\
回复 使用道具 举报
for(int i =101; i<=999;i+=2){}
回复 使用道具 举报

我感觉是100到999,但是后面用的是for嵌套用if和%来判断是否整除,我的困惑是,嵌套的话会从内循环开始到结束都除一次啊我想要在内循环中找到一个数是可以给它整除的,然后跳出内循环,我的思路是不是错的,求思路
回复 使用道具 举报
for(int i = 101;i<=999;i+=2){
     for(k=2;k<i;I++){if(i%k!=0){sop(i)}}
}
}
回复 使用道具 举报
for循环嵌套,再用if来判断是否整除,在计数
回复 使用道具 举报

为什么i自加2啊,如果打印放在嵌套循环里,i取一个值,但是有好几个值可以整除他,这样不就会吧那个数打印好几次嘛
回复 使用道具 举报
Wqi 高级黑马 2015-8-29 21:07:52
17#
  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:17
18#
姜群 发表于 2015-8-29 20:25
为什么i自加2啊,如果打印放在嵌套循环里,i取一个值,但是有好几个值可以整除他,这样不就会吧那个数打 ...

i+2是为了跳过所有的偶数
回复 使用道具 举报
这个比较复杂,慢慢搞吧
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马