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的伪素数。
            伪素数满足费马小定理,几乎肯定为质数。
    */
  • 相关阅读:
    c++ 与 c 的区别
    c++ 查看程序运行时间
    串口阻塞与非阻塞
    串口缓冲区
    马拉车算法
    printf 自加自减
    stack
    长度问题
    PCIE的内存地址空间、I/O地址空间和配置地址空间
    数组和指针
  • 原文地址:https://www.cnblogs.com/Ackermann/p/5952803.html
Copyright © 2011-2022 走看看