黑马程序员技术交流社区

标题: 遇到一编程题,求各位大神指点 [打印本页]

作者: Petergee    时间: 2016-4-15 23:18
标题: 遇到一编程题,求各位大神指点
分析以下需求,并用代码实现:
        (1)打印1-100之间的所有素数及个数
        (2)每行输出5个满足条件的数,之间用空格分隔
        (3)如果一个大于1的自然数,这个数只能被1和其本身整除,这个数就叫素数。
        (4)如:2 3 5 7 11


作者: yaolv7    时间: 2016-4-15 23:37
思路:
         a、2是最小的,也是唯一的偶数素数,所以,除了2以外的所有偶数都可以排除
         b、大于1的,并且只能被1和其本身整除的数叫素数,所以,排除所有偶数外,当一个大于1的整数,除以大于1并小于它的所有奇数,只要能被一个整除,那这个整数就可以排除,剩下的就是素数。
作者: Q灬先生    时间: 2016-4-15 23:48
public class Test {
        public static void main(String[] args) {
               
                int count = 0;
       
                for(int i = 2;i<100;i++) {
                        int temp = (int) Math.sqrt(i);
                        int j = 2;
                        for(;j<=temp;j++) {
                                if(i%j==0){
                                        break;
                                }
                        }
                        if(j>temp) {
                                count++;
                                System.out.print(i+" ");
                                if(count%5==0) {
                                        System.out.println();
                                }
                        }
                }
                System.out.println();
                System.out.println("101-200的素数个数为:"+count);
        }
}

作者: Petergee    时间: 2016-4-16 22:28
yaolv7 发表于 2016-4-15 23:37
思路:
         a、2是最小的,也是唯一的偶数素数,所以,除了2以外的所有偶数都可以排除
         b、大 ...

代码分享下
作者: yaolv7    时间: 2016-4-16 22:37
Petergee 发表于 2016-4-16 22:28
代码分享下

额,要自己想呀....我只能给你个提示

outer: for( ; ; ) {
    for ( ; ; ) {
      if( ) {
        continue outer;
    }
  }
System.out.print("素数");
}

怎么记数换行之类的我就不写了

作者: Petergee    时间: 2016-4-16 22:53
yaolv7 发表于 2016-4-16 22:37
额,要自己想呀....我只能给你个提示

outer: for( ; ; ) {

就是不明白怎么判断是素数,见老师给的参考答案里用了Math.sqrt(),方法,但是不明白原理,所以不想用哪个方法,纠结了
作者: yaolv7    时间: 2016-4-16 23:09
本帖最后由 yaolv7 于 2016-4-16 23:10 编辑
  1. public static void printPrimeNumber(int num){

  2. System.out.print(2 + "\t" );        //2是唯一的偶数素数,先打印输出

  3. outer:for (int i = 3; i < num; i+=2) {
  4. for (int j = 3; j < i; j+=2) {
  5. if (i % j == 0)       
  6. continue outer;        //i 能被小于它的任意一个奇数整除,则排除当前i值
  7. }        //内循环结束
  8. System.out.print(i + "\t");        //若 i 都不被大于1并小于它的所有奇数整除,则为素数,打印输出


  9. }        //外循环结束
复制代码



作者: yaolv7    时间: 2016-4-16 23:12
格式实在是没办法整理,一弄就乱,将就看下吧




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