zoukankan      html  css  js  c++  java
  • 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;
    }
     
  • 相关阅读:
    RBAC概念
    Django框架的优缺点
    全文检索whoosh
    软件项目管理|期末复习(九)
    软件项目管理|期末复习(十四)
    HOJX 1003| Mixing Milk
    [转发]ACM刷题网站
    [转发]软件工具|Github上整理的一些工具
    软件项目管理|期末复习(三)
    计算机图形学|两道习题
  • 原文地址:https://www.cnblogs.com/program-ccc/p/5682630.html
Copyright © 2011-2022 走看看