1702 素数判定 2
时间限制: 1 s
空间限制: 128000 KB
题目等级 : 钻石 Diamond
题目描述 Description
一个数,他是素数么?
设他为P满足(P<=263-1)
输入描述 Input Description
P
输出描述 Output Description
Yes|No
样例输入 Sample Input
2
样例输出 Sample Output
Yes
数据范围及提示 Data Size & Hint
算法导论——数论那一节
注意Carmichael Number
分类标签 Tags 点此展开
题解:费马小定理判断麦森数是否是质数
#include<cstdio> #include<iostream> using namespace std; #define ll long long ll n; int prime[]={2,3,5,7,11,13,17,19,23,29}; ll cheng(ll a,ll b){/*慢速乘法*/ ll ans=0; for(ll i=a;i;i>>=1){ if(i&1) ans=(ans+b)%n; b=(b+b)%n; } return ans%n; } ll mull(ll a,ll b){/*快速幂 */ ll ans=1; for(ll i=a;i;i>>=1){ if(i&1) ans=cheng(ans,b)%n; b=cheng(b,b)%n; } return ans%n; } bool check(){ if(n==2) return 1; if(n<2||n&1==0) return 0; for(int i=0;i<10;i++){/*费马定理+验证法*/ if(mull(n-1,prime[i])!=1) return 0; } return 1; } int main(){ cin>>n; if(check()) puts("Yes"); else puts("No"); return 0; }
时间: 2024-11-20 19:24:02