zoukankan      html  css  js  c++  java
  • 每日一练No.4

    【如何列出质数】

    输出在指定范围内的所有质数。

    【编程思路】

    1不是质数,也不是合数,把1排除。2是质数,保留,把2后面所有能被2整除的数都划去。2后面第一个没划去的数是3,把3留下,再把3后面所有能被3整除的数都划去,一直循环做下去,就会把不超过N的全部合数划去,留下的就是不超过N的全部质数。

    【源代码】

     1 package javaexamples;
     2 import java.util.Arrays;
     3 
     4 public class SuShu
     5 {
     6     private static boolean[] primeNumber(int num){//求质数
     7         if(num<0){//检查指定的范围:质数必须大于零
     8             System.out.println("范围必须大于0");
     9             return null;
    10         }
    11         boolean[] primes=new boolean[num+1];//声明布尔类型数组,长度为范围+1
    12         primes[1]=false;//将特殊数字1抛出,因为1不是质数
    13         Arrays.fill(primes,2,num+1,true);//将布尔数组元素的值都赋为true,2是索引值,从2开始,到num+1终止
    14         int n=(int)Math.sqrt(num);//Math.sqrt()方法用于求开方
    15         for(int i=1;i<n;i++){
    16             if(primes[i]){//如果是质数,那么i的倍数不是质数
    17                 for(int j=2*i;j<=num;j+=i){
    18                     primes[j]=false;
    19                 }
    20             }
    21         }
    22         return primes;
    23     }
    24     public static void showPrimeNumber(int num){//显示质数
    25         boolean [] primes=primeNumber(num);//调用方法赋值给布尔类型的数组
    26         int n =0;
    27         if(primes!=null){
    28             for(int i=1;i<primes.length;i++){//循环数组操作数组的元素
    29                 if(primes[i]){//如果数组元素值为true,则下标值为质数
    30                     System.out.print(i+" ");//输出质数
    31                     if(++n%10==0)//以每行10个质数输出
    32                         System.out.println();
    33                 }
    34             }
    35             System.out.println();
    36         }
    37         System.out.print("一共有"+n+"个");
    38     }
    39     public static void main(String[] args){
    40         int num = 100;//声明求质数的范围
    41         System.out.println("范围在"+num+"内的质数有:");
    42         showPrimeNumber(num);//调用方法显示质数
    43     }
    44 }

    【运行结果】
    范围在100内的质数有:
    2 3 5 7 11 13 17 19 23 29
    31 37 41 43 47 53 59 61 67 71
    73 79 83 89 97
    一共有25个

    【关键技术解析】

    1、定义两个方法,一个是求质数的,一个是显示质数的。

    2、求质数时需要检查质数范围是否正确。

    3、为了方便,将质数所在的布尔类型数组的index值与数字值相匹配,所以长度设置为范围+1。

    4、Math.sqrt()方法用于求开方。

    5、Array.fill(boolean[] a, int fromIndex, int toIndex, boolean val) 方法,是将指定的 boolean 值分配给指定 boolean 型数组指定范围中的每个元素。

    6、在输出时,判断数组元素是否为true值,下标值即为质数,输出时较方便。

    【心得】

    感谢aniuer给了我java的中文API,今天学会了查阅,的确方便很多。

    只是代码中primeNumber()方法中for循环的内容不太明白,还要仔细研究一下……

  • 相关阅读:
    MongoDb学习(五)--Gridfs--上传下载
    MongoDb学习(四)--Repository----语法关键字
    MongoDb学习(四)--Repository
    MongoDB插入数据,除去Class key
    MongoDb学习三(spring-data-mongodb)
    MongoDb二
    java连接mongodb数据库
    MongoDb笔记
    java字符统计+字符串压缩
    安卓蓝牙操作+蓝牙工具类
  • 原文地址:https://www.cnblogs.com/mengqiqi/p/2683549.html
Copyright © 2011-2022 走看看