您的位置:首页 > 其它

codevs 1702 素数判定2 玄学?? 解题报告?

2017-09-29 09:56 507 查看

题目描述 Description

一个数,他是素数么?

设他为P满足(P<=263-1)

输入描述 Input Description

P

输出描述 Output Description

Yes|No

样例输入 Sample Input

2

样例输出 Sample Output

Yes

数据范围及提示 Data Size & Hint

算法导论——数论那一节

注意Carmichael Number

思路

我怎么知道思路啊我就是不知道啊!!!

想用米勒拉宾来判断,复杂度o(p*logn),p是个数,取决于你想要的精度。然后我写的丑常数比较大,于是就只有40分!!

根本不会啊求助大佬啊

代码

抽风扯淡代码

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<cmath>
#include<vector>
#include<ctime>
using namespace std;
long long qpow(int a,int b,int r)
{
long long ans=1,base=a;
while(b)
{
if (b&1) ans=(ans*base)%r;
base=(base*base)%r;
b>>=1;
}
return ans;
}
int Miller_Rabbin(int n,int a)//米勒拉宾素数测试
{
int r=0,s=n-1,j;
if (!(n%a)) return 0;
while(!(s&1)) {s>>=1;r++;}
long long k=qpow(a,s,n);
if (k==1) return 1;
for (j=0;j<r;j++,k=k*k%n)
if (k==n-1) return 1;
return 0;
}
bool IsPrime(int n)//判断是否是素数
{
int tab[]={2,3,5,7};
for (int i=0;i<4;i++)
{
if (n==tab[i]) return true;
if (!Miller_Rabbin(n,tab[i])) return false;
}
return true;
}
int main()
{
long long n;
scanf("%I64d",&n);
if (IsPrime(n)==1) printf("Yes\n");
else printf("No\n");
return 0;
}


这哥们儿过了??
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: