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

题目描述 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
#include
#include
#include
#include
#include
#include
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;jif (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;  
}  

这哥们儿过了??

你可能感兴趣的:(————单个题目———,————数论————,素数筛)