zoukankan      html  css  js  c++  java
  • 素数判定

    【题目描述】

    输入一个数P(P <= 263-1),询问是否为素数。

    【输入描述】

    输入一个正整数P。

    【输出描述】

    如果P为素数,则输出“Yes”,否则输出“No”。

    【样例输入】

    2

    【样例输出】

    Yes

    源代码:
    
    #include<cstdio>
    #define LL long long
    LL n,Prime[10]={2,3,5,7,11,13,17,19,23,29};
    LL Mod(LL S,LL X) //慢速模。
    {
        LL Num=0;
        while (S)
        {
            if (S&1)
              Num=(Num+X)%n;
            X=(X+X)%n;
            S>>=1;
        }
        return Num;
    }
    LL Count(LL S,LL X) //快速幂。
    {
        LL Num=1;
        while (S)
        {
            if (S&1)
              Num=Mod(Num,X);
            X=Mod(X,X);
            S>>=1;
        }
        return Num;
    }
    bool Check() //Fermat小定理检验质数。
    {
        if (n==2)
          return true;
        else
          if (n<2||!(n&1)) //特判。
            return false;
        for (int a=0;a<10;a++) //多次检验。
        {
            if (n==Prime[a]) //再特判。
              return true;
            if (Count(n-1,Prime[a])!=1)
              return false;
        }
        return true;
    }
    int main()
    {
        scanf("%lld",&n);
        if (Check())
          printf("Yes");
        else
          printf("No");
        return 0;  
    }
    
    /*
        伪素数:
            对于正整数n,若有与n互质的正整数a满足a^(n-1) ≡ 1(mod n),则n为a的伪素数。
            伪素数满足费马小定理,几乎肯定为质数。
    */
  • 相关阅读:
    数据提交
    Python网页信息抓取
    Python语法学习
    Elasticsearch5.x 升级-插件
    LeetCode 33 搜索旋转排序数组
    按之字形顺序打印二叉树
    股票的最大利润
    LeetCode 1143 最长公共子序列
    对称的二叉树
    两个链表的第一个公共结点
  • 原文地址:https://www.cnblogs.com/Ackermann/p/5952803.html
Copyright © 2011-2022 走看看