您的位置:首页 > 其它

hdu 2973 威尔逊定理+素数筛法

2016-06-23 22:58 148 查看


先输入test个数,然后对每个n输出Sn的值

威尔逊定理:

若p为质数,则

p|(p-1)!+1

亦:(p-1)! ≡ p-1 ≡ -1(mod p)

【x】是对x取整。

所以观察可得当3k+7为素数,当前k的对应【】里面的数值为1,否则为0,素数筛法搞定。

#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
using namespace std;
#define LL long long
#define MAXN 3000008
#define LL long long
int prime[MAXN]={0};
int ans[MAXN]={0};
void isprime(){
prime[0]=prime[1]=1;
for(LL i=2;i*i<=MAXN;i++){
if(!prime[i]){
for(LL j=i*2;j<=MAXN;j+=i){
prime[j]=1;
}
}
}
}
void f(){
for(int i=2;i<1000001;i++){
if((!prime[i*3+7])){
ans[i]=ans[i-1]+1;
}
else {
ans[i]=ans[i-1];
}
}
}
int main()
{
isprime();
f();
int t,n;
cin>>t;
while(t--){
scanf("%d",&n);
printf("%d\n",ans
);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: