质数定义:
质数本身是指只有了1和它自己本身作为因数,不存在其他的任何的因数了。(注:
1本身并不是质数 )
根据质数的定义,在进行代码的实现之前,我们可以先思考:
什么数一定不是质数?
1> 在这样的思考之下,不难发现,凡是正偶数(2除外),都一定不是质数,可以首先判断要输入的数字是否是偶数,也大大简化了代码运算的时间,之后再进行下一步的分析
Scanner in =new Scanner(System.in); int num =in.nextInt(); //对输入的数字判是非是偶数形式,并且其中并不包含2,如果是1也直接舍去 boolean x=true; if(num==1 || num%2==0 && num!=2){ x=false; }
2>判断完成之后,已知的是正偶数都一定不是一个质数,那么它的除数,一定也不是一个这样的偶数,因为质数其中只有1跟它本身是因数,所以我们从3开始作为因数进行寻找:
Scanner in =new Scanner(System.in); int num =in.nextInt(); //对输入的数字判是非是偶数形式,并且其中并不包含2,如果是1也直接舍去 boolean x=true; if(num==1 || num%2==0 && num!=2){ x=false; } else{ //在这里,i+=2而不是i++,原因我们已经分析过了,在初步对于偶数筛选完毕后,若让偶数作为除数,那么所有的偶数,都不可能是作为其因数 for(int i=3;i<num;i+=2){ if(num%i==0){ x=true; break; } } }
3>判断完成之后,输出是否是质数即可:
Scanner in =new Scanner(System.in); int num =in.nextInt(); //对输入的数字判是非是偶数形式,并且其中并不包含2,如果是1也直接舍去 boolean x=true; if(num==1 || num%2==0 && num!=2){ x=false; } else{ //在这里,i+=2而不是i++,原因我们已经分析过了,在初步对于偶数筛选完毕后,若让偶数作为除数,那么所有的偶数,都不可能是作为其因数 for(int i=3;i<num;i+=2){ if(num%i==0){ x=true; break; } } if(x){ System.out.println(num+"是一个质数"); } else{ System.out.println(num+"不是一个质数"); } }
4>代码进一步改善。只需要排到sqer(num)即可
Scanner in =new Scanner(System.in); int num =in.nextInt(); //对输入的数字判是非是偶数形式,并且其中并不包含2,如果是1也直接舍去 boolean x=true; if(num==1 || num%2==0 && num!=2){ x=false; } else{ //在这里,i+=2而不是i++,原因我们已经分析过了,在初步对于偶数筛选完毕后,若让偶数作为除数,那么所有的偶数,都不可能是作为其因数 for(int i=3;i<=Math.sqar(num);i+=2){ if(num%i==0){ x=true; break; } } if(x){ System.out.println(num+"是一个质数"); } else{ System.out.println(num+"不是一个质数"); } }
时间长度O(sqrt(n))