zoukankan      html  css  js  c++  java
  • 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("素数为:
    " + v);
    37     }
    38 }
  • 相关阅读:
    判断arm立即数是否合法的小程序
    一个操作系统的实现:关于ALIGN的若干解释
    一个郁闷的C语言小问题
    test
    浮点数的比较
    一个操作系统的实现:Descriptor 3详解
    一个操作系统的实现:关于CPL、RPL、DPL
    C99可变长数组VLA详解
    SVProgressHUD 用法
    IOS CALayer 详解
  • 原文地址:https://www.cnblogs.com/liuyangfirst/p/6483712.html
Copyright © 2011-2022 走看看