超级素数实现算法

来源:互联网 发布:linux备份系统 编辑:程序博客网 时间:2024/05/17 03:14

1.超级素数的概念:一个m位数的素数,从高位到低位一次去掉一个数,仍然都是素数。输入m,输出m为超级素数的总个数并且输出最大m为的超级素数

2.分析:可以从两个方向出发:1>从1位开始找素数,然后一步步加位数,查找素数;2>从m位开始找,然后在去掉最高位,在查找素数。。。 不管是什么方法,我们都发现,超级素数f一定是素数或者f个位数一定是3或者7

3.实现代码:

public class test{    public static void main(String[] args){        test t = new test();        t.fun();    }    //实现思想:从低位依次加一位到m位    public void fun(){        Scanner in = new Scanner(System.in);        System.out.print("请输入一个m(m>1):");           int m = in.nextInt();        //定义数组保存当前递推位数的前一低位的所有素数的值,保存位double型是因为m大了int会损失精度的        double a[] = new double[20000];        //定义一个辅助数组,用于将此次找到的超级素数保存到a数组中        double b[] = new double[20000];        //定义e数组,表示当前的高位是乘以多少        double e[] = new double[20];        //初始化a数组,也就是保存1位数时的所有超级素数        a[1] = 3;        a[2] = 7;        //初始化e数组,第一位乘以1,第二位乘以10,依次指数递增        e[1] = 1;        //保存当前计算的i位的i-1位时的超级素数的个数,初始化为1位数时的超级素数的个数        int g = 2;        //定义辅助变量用于保存当前位数的超级素数的个数,因为g要参与for循环操作        int t = 0;        //定义保存真正要获得的两个数据,m位数的超级素数个数s以及最大数d        int s = 0;        double d = 0;        for(int i=2; i<=m; i++){            e[i] = e[i-1] * 10;            for(int j=1; j<=9; j++){                for(int k=1; k<=g; k++){                    if(issushu(j*e[i]+a[k])){                        b[++t] = j*e[j]+a[k];                        //如果当前计算的位数已经到m了,就开始记录真正需要获得的数据了                        if(i == m){                            s++;                            d = j*e[j]+a[k];                        }                    }                }            }            g = t;            for(int c=1; c<=g; c++){                a[c] = b[c];            }           }        System.out.println(m + "位数的超级素数的总个数为:" + s);        System.out.println(m +"位数的超级素数最大值为:" + d);    }    //判断n是否为素数,如果是则返回true    public void issushu(double n){        int h = (int)Math.pow(n,0.5);        int z = 1;        for(int i=2; i<=h; i++){            if(n % i == 0){                System.out.println(n + "---->" + i);                z = 0;                break;            }        }        if(z == 1)            return true;        return false;    }}
0 0
原创粉丝点击