因为自己也是信息安全专业的,老师留的作业编程实现大素数生成算法。但自己当时在网上了一下,都不太好,还需要自己修改。虽然java自带相关的类方法,但感觉还是自己写程序实现比较好。下面是自己写的程序,亲测能够使用。
思路在备注上有,这里就不多说了。
import java.math.BigInteger;
public class bigPrime
{
    static BigInteger s_prime=new BigInteger("1");//定义一个BigInteger类型的变量s_prime,用来存放产生的大素数;因为构造函数没有无参的所以初始化为1。
private static final BigInteger ZERO=BigInteger.ZERO;
private static final BigInteger ONE=BigInteger.ONE;
private static final BigInteger TWO=new BigInteger("2");
private static StringBuffer []digits={new StringBuffer("0"),new StringBuffer("1"),new StringBuffer("2"),new StringBuffer("3"),new StringBuffer("4"),new StringBuffer("5"),new StringBuffer("6"),new StringBuffer("7"),new StringBuffer("8"),new StringBuffer("9")};
private static BigInteger primeList[]=new BigInteger[1000];
    private static int k=0;
    //////////////////////////////////主方法:1:调用构造方法生成2000以内的素数;  2:调用bigRandom(20)方法生成20位的随机大奇数;  3:removeEvenNumber(s_prime)除去偶数;  4:fermatPrimalityTest(s_prime)利用Fermat素性检验;
    public static void main(String args[])
    {
        new bigPrime();
        for(int j=0;j<10;j++)
        {
            while(true)
          {
            s_prime=bigRandom(20);
            s_prime=removeEvenNumber(s_prime);
            if(fermatPrimalityTest(s_prime))
          {
              System.out.println(s_prime+"是素数!");
              break;
          }
        }
        }
       
    }
   
    //////////////////////////////生成2000以内的素数并初始化primeList[1000]
    public bigPrime()
    {
    String str_prime;
        for(int i=2;i<2000;i++)
        {
            boolean flag=true;
            for(int j=2;j<Math.sqrt(i);j++)
            if(i%j==0)
            {
                flag=false;
                break;
            }
            if(flag)
            {
                  str_String(i);
                  primeList[k++]=new BigInteger(str_prime);
            }
           
        }
    }
   
    ///////////////////Fermat素性检验
    public static boolean fermatPrimalityTest(BigInteger num)   
    {
        for(int i = 0; i < k; i++)
        {
            if(!((primeList[i].modPow(num.subtract(ONE),num)pareTo(ONE))==0))java生成随机数的方法
            {
                return false;
            }
        }
       
        return true;
    }
   
    /////////////////一次产生一个0~9的随机数,并保证最高位不是零
private static StringBuffer randomDigits(boolean isZero)
{
    int index;
    if(isZero)
    {
        index=(int)(Math.floor(Math.random()*10));
    }
    else
    {index=1+(int)(Math.floor(Math.random()*9));}
    return digits[index];
}
/////////////产生大的随机数
public static BigInteger bigRandom(int n)
{
    StringBuffer s=new StringBuffer("");
    for(int i=0;i<n;i++)
    {
        if(i==0)
        {
            s.append(randomDigits(false));
        }
        else
        {
            s.append(randomDigits(true));
        }
    }
    return (new String()));
}
/////////去除偶数
private static BigInteger removeEvenNumber(BigInteger n)
{
    return (n.mod(TWO)pareTo(ZERO)==0)?n.add(ONE):n;
}
}

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。