• POJ3641(快速幂)


    Pseudoprime numbers
    Time Limit: 1000MS   Memory Limit: 65536K
    Total Submissions: 8529   Accepted: 3577

    Description

    Fermat's theorem states that for any prime number p and for any integer a > 1, ap = a (mod p). That is, if we raise a to the pth power and divide by p, the remainder is a. Some (but not very many) non-prime values of p, known as base-pseudoprimes, have this property for some a. (And some, known as Carmichael Numbers, are base-a pseudoprimes for all a.)

    Given 2 < p ≤ 1000000000 and 1 < a < p, determine whether or not p is a base-a pseudoprime.

    Input

    Input contains several test cases followed by a line containing "0 0". Each test case consists of a line containing p and a.

    Output

    For each test case, output "yes" if p is a base-a pseudoprime; otherwise output "no".

    Sample Input

    3 2
    10 3
    341 2
    341 3
    1105 2
    1105 3
    0 0
    

    Sample Output

    no
    no
    yes
    no
    yes
    yes
    思路:问p是不是伪素数。伪素数条件:①p不是素数。② ap = a (mod p)。
    #include <iostream>
    using namespace std;
    typedef unsigned long long ull; 
    ull a,p;
    bool testPrime(ull x)
    {
        for(ull i=2;i*i<=x;i++)
        {
            if(x%i==0)
            {
                return false;
            }
        }
        return true;
    }
    ull mpow(ull x,ull n,ull mod)
    {
        ull res=1;
        while(n>0)
        {
            if(n&1)
            {
                res=(res*x)%mod;
            }
            x=(x*x)%mod;
            n>>=1;
        }
        return res;
    }
    int main()
    {
        while(cin>>p>>a)
        {
            if(a==0&&p==0)    break;
            if(testPrime(p))
            {
                cout<<"no"<<endl;
            }            
            else
            {
                if(mpow(a,p,p)==a%p)
                {
                    cout<<"yes"<<endl;
                }    
                else
                {
                    cout<<"no"<<endl;
                }
            }
        }
        return 0;
    }
     
  • 相关阅读:
    实验四 决策树算法及应用
    实验三 朴素贝叶斯算法及应用
    实验二 k-近邻算法及应用
    实验一 感知器及其应用
    实验三 面向对象分析与设计
    实验二 结构化分析与设计
    实验一 软件开发文档与工具的安装与使用
    ATM管理系统
    流程图与活动图的区别与联系
    四则运算2
  • 原文地址:https://www.cnblogs.com/program-ccc/p/5682630.html
Copyright © 2020-2023  润新知