首页 > 代码库 > 2 质数求解

2 质数求解

题目:判断101-200之间有多少个素数,并输出所有素数。
程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除,   则表明此数不是素数,反之是素数.    

思路分析:

          这里需要进行两个求解:

                     第一个是求解素数的个数,第二个是打印这些素数的.

        (1) 在101-200之间限定了范围是在101-200之间的数,要判断在这个区间的数,需要判断这区间的每一个数,所以需要遍历,在计算机中,遍历就是做一个或多个for循环操作

                   所以判断101-200区间数,就写为

                                 for(int i=101;i<=200;i+=2)

                                   {

                                       }

           这里定义一个变量i,因为是从101开始的,所以初始值设置为101,到200,就是小于等于200,因为是质数,每次都是增加2,所以写作i+=2,就是i=i+2

       (2)判断一个数是素数,就是数学中的质数,质数就是除了1和它本身没有其他因数的数,举例5=1*5,所以5的因数就是1和5,所以5是素数,而6=2*3.6=1*6,6的因数就有1,2,3,6,这就是四个,它就不是素数.

            根据以上描述可得,素数的数,都是可以跟自己整除的数,所以运用取莫运算,因为取莫运算可以得到0和1,0和1可以判断真假,从而得出是否为质数,

            可以用101到200之间的数,分别除以一个数,得1的就是质数,得0的就是其他数,这样一直判断下去,这样就又形成一个判断区间,就是多次取莫

               因为最小的质数是2,所以从2开始,到根号200结束,每次加一

                       2~√200 区间(至于为什么是√200,可以百度一下,为什么素数需要根号判断,这是一个数学问题,请问数学老师)这里只说,可以提高效率

                   得到循环

                              for(int j =2;j<=√200;j++){

                                     if(i%j==0){

}                                      

             (3)判断是质数,设置一个计数器命名count=0,随着每次增加count增加

                                    if(是质数){

                                     count++;                                  

            }

思路就是如此,我这里用了集合,最后数值放入一个集合中显示,如果还是不清楚,代码复制入编译器,然后run一下.

            

 1         @SuppressWarnings({"unchecked","rawtypes"})
 2 public class _002101_200PrimeNumber {
 3 
 4     public static void main(String[] args) {
 5         countZhiShu();
 6     }
 7 
 8     private static void countZhiShu() {
 9         // 计算变量
10         int count = 0;
11         
12         // 集合,用来装所有的素数 
13         Vector v = new Vector();
14         for (int i = 101; i <= 200; i+=2) {
15             // 判断依据
16             boolean b = false;
17             for (int j = 2; j < Math.sqrt(i); j++) {
18                 // 求余数是否为0  
19                 if (i % j == 0) {
20                     // 如果为0, 将标签设置为false    
21                     b = false;
22                     // 可以整除就跳出这个循环                
23                     break;
24                 } else {
25                     b = true;
26                 }
27             }
28             if (b == true) {        
29                 //  素数个数加1  
30                 count++;
31                 // 将符合要求的i加到集合里 
32                 v.add(i);
33             }
34         }
35         System.out.println("100到200中间有 " + count + " 个素数");
36         System.out.println("素数为:\n" + v);
37     }
38 }

 

2 质数求解