GCD&&素筛&&快速幂 --A - Pseudoprime numbers
Posted zjydeoneday
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了GCD&&素筛&&快速幂 --A - Pseudoprime numbers相关的知识,希望对你有一定的参考价值。
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-a 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,a.先判断p是否为素数,如果是,输出no。否则,再判断a的p次方取余p是否为a,是则yes,反之
则no。
#include<iostream> #include<math.h> #include<stdio.h> using namespace std; typedef long long ll; int isprime(ll n) if(n<=3) return n>1; int k; k=sqrt(n); if(n%6!= 1 && n%6!=5) return 0; for(int i=5;i<=k;i+=6) if(n%i==0 || n%(i+2)==0) return 0; return 1; ll qpow(ll a, ll n,ll mod)//计算a^n % mod ll re = 1; while(n) if(n & 1)//判断n的最后一位是否为1 re = (re * a) % mod; n >>= 1;//舍去n的最后一位 a = (a * a) % mod;//将a平方 return re; int main() ll p,a; while(cin>>p>>a&&a&&p) if(isprime(p)) cout<<"no"<<endl; else if(a==qpow(a,p,p)) cout<<"yes"<<endl; else cout<<"no"<<endl; return 0;
typedef
typedef long long ll;
快速幂模板
ll qpow(ll a, ll n,ll mod)//计算a^n % mod
ll re = 1;
while(n)
if(n & 1)//判断n的最后一位是否为1
re = (re * a) % mod;
n >>= 1;//舍去n的最后一位
a = (a * a) % mod;//将a平方
return re;
质数判定模板
int isprime(ll n)
if(n<=3) return n>1;
int k;
k=sqrt(n);
if(n%6!= 1 && n%6!=5)
return 0;
for(int i=5;i<=k;i+=6)
if(n%i==0 || n%(i+2)==0)
return 0;
return 1;
注意输入用cin,用scanf会wa
以上是关于GCD&&素筛&&快速幂 --A - Pseudoprime numbers的主要内容,如果未能解决你的问题,请参考以下文章
POJ 2429 GCD & LCM Inverse (大数分解)
SPOJ4491. Primes in GCD Table(gcd(a,b)=d素数,(1<=a<=n,1<=b<=m))加强版