• Java 构造素数表的两种方法


    构造一个含有50个素数的素数表,当下一次出现数字需要判断是否为素数的时候,就可以直接在素数表中用二分查找法寻找是否为素数了。

        public static void main(String[] args) {
            int[] a=new int[50];//new一个专门存放素数的数组
            a[0]=2;//这个素数的第一个数是2
            int cnt=1;//这个表有了第一个素数2,从1开始计数,一共数50个数
            int number=3;//从3开始检验数字,查看是否是素数
            MAIN_LOOP://goto语句
            for(;cnt<10;number++)//从3开始数起,一共需要找到50个素数
            {
                for(int j=0;j<cnt;j++)//从素数表的第一个素数开始数起,一直到当前素数表的最大个数
                    if(number%a[j]==0)//查看当前的数字能否整除素数表中的数字,如若可以,则当前数字不是素数
                        continue MAIN_LOOP;//发现当前数字不是素数,返回第一层循环:检验下一个数字是不是素数
                a[cnt++]=number;//若当前数字通过检测为素数,则添加到素数表当中
            }
            for(int k:a)//for each循环打印当前素数表
            {
                System.out.println(k);
            }
        }

     第二种方法就是找倍数法,一个素数x的2倍、3倍、4倍......一定全是非素数

    那么就定义一个长度为N的布尔数组(目的是寻找2~N种有多少素数),现将所有数全部定为素数:

    举例:从2开始数起:2的2倍=4,3倍=6,4倍=8,一直到2*x倍<=N为止的全部数必定都是非素数

    从3开始,6,9,12,15必定为非素数

    4已经被定为非素数,不用管

    5的倍数10,15,20,25.....全部为非素数

    .......

        public static void main(String[] args) {//寻找100以内的素数
            boolean[] isPrime=new boolean[100];//定义一个长度为100的布尔数组,默认数字1~100全部为素数
            for(int i=2;i<isPrime.length;i++)//由于new的数组数值全为0==false
                isPrime[i]=true;//需要把数组转变为true数组,由于0,1不是素数,所以从2开始转为true
            for(int i=2;i<isPrime.length;i++)//从数字2开始检验,一直到100为止
                if(isPrime[i])//如果当前的这个数字是素数的话
                    for(int j=2;i*j<isPrime.length;j++)//找出这个数字的2倍,3倍,4倍....直到这个倍数的数字达到100为止
                        isPrime[i*j]=false;//将这个数字的所有倍数全部定位非素数
            for(int i=0;i<isPrime.length;i++)
                if(isPrime[i])
                    System.out.println(i);
  • 相关阅读:
    在归并排序中对小数组采用插入排序实现代码
    PAT 1032. Sharing
    1031. Hello World for U
    PAT 1030. Travel Plan
    PAT 1029. Median
    PAT 1028. List Sorting
    PAT 1027. Colors in Mars
    PAT 1026. Table Tennis
    PAT 1025. PAT Ranking
    Several Important Commands in GMT
  • 原文地址:https://www.cnblogs.com/oldfish123/p/13358306.html
Copyright © 2020-2023  润新知