zoukankan      html  css  js  c++  java
  • 米勒罗宾素数判定法

    说明:根据费马小定理做的,时间复杂度很低。但是有一定概率判断出错,一般count==5时判断几率有99%。

    代码

    #include<cstdlib>
    #include<ctime>
    #include<cstdio>
    using namespace std;
    const int count=10; //提高判断精确度
    int modular_exp(int a,int m,int n)
    {
        if(m==0)
            return 1;
        if(m==1)
            return (a%n);
        long long w=modular_exp(a,m/2,n);
        w=w*w%n;
        if(m&1)
            w=w*a%n;
        return w;
    }
    
    bool Miller_Rabin(int n)
    {
        if(n==2)
            return true;
        for(int i=0;i<count;i++)
        {
            int a=rand()%(n-2)+2;
            if(modular_exp(a,n,n)!=a)
                return false;
        }
        return true;
    }
    int main()
    {
        srand(time(NULL));//随机数种子
        int n;
        while(~scanf("%d",&n))
        {
             if(Miller_Rabin(n))
                printf("YES
    ");
             else
                printf("NO
    ");
        }
        return 0;
    }
    

      

  • 相关阅读:
    css3多列
    伪元素
    text文本样式二
    透明登录框
    透明度设置opacity
    超链接
    meta标签
    奇偶选择器
    OC跟Swift混编
    Swift中as as! as?的区别
  • 原文地址:https://www.cnblogs.com/l1l1/p/8909238.html
Copyright © 2011-2022 走看看