Goldbach`s Conjecture LightOJ - 1259(素数筛)
题意:
著名的哥德巴赫猜想问题
每个大于2的偶数,都能分解为两个素数a,b的和
然后题目要求:a<=b;
给定n,求有多少对a,b符合条件,并输出
4 ≤ n ≤ 10^7,n是偶数
题解:
直接运用素数筛:埃氏筛和欧拉筛都可以
提前打下表
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<iostream>
#include<sstream>
#include<string>
#include<queue>
#include<vector>
#include<set>
#include<stack>
#include<map>
#define lowbit(x) x&(-x)
#define ll long long
#define inf 0x3f3f3f3f
#define mod 1000
using namespace std;
const double pi=acos(-1.0);
const int maxn=1e7;
const double eps=1e-8;
bool vis[maxn+10];
int prime[1000010];
int t,n;
int tot;
void isPrime(){
memset(vis,true,sizeof(vis));
vis[1]=false;
for(int i=2;i<=maxn;i++){
if(vis[i]==true){
prime[tot++]=i;
}
for(int j=i*2;j<=maxn;j+=i){
vis[j]=false;
}
}
return ;
}
int main(){
tot=0;
isPrime();
scanf("%d",&t);
int cnt=1;
while(t--){
int ans=0;
scanf("%d",&n);
for(int i=0;prime[i]<=n/2;i++){ //循环结束条件需要注意下,开始还wa了几次
if(vis[n-prime[i]]==true){
ans++;
}
}
printf("Case %d: %d\n",cnt++,ans);
}
return 0;
}