1.线性筛 减法 枚举
ybt
通过
测试点 | 结果 | 内存 | 时间 |
测试点1 | 答案正确 | 4836KB | 29MS |
LOJ
感觉题目还是比较简单,先筛出10^6内的所有质数,再自小到大枚举质数a,验证n-a是否是质数。
线性筛 减法 枚举 代码如下:
#include <bits/stdc++.h>
#define maxn 1000010
using namespace std;
int b[maxn],prime[maxn],tot=0;
void linear(int x){//线性筛
int i,j;
for(i=2;i<=x;i++)b[i]=0;
for(i=2;i<=x;i++){
if(b[i]==0)prime[++tot]=i;
for(j=1;j<=tot&&i*prime[j]<=x;j++){
b[i*prime[j]]=1;
if(i%prime[j]==0)break;
}
}
}
int main(){
int n,a,c,i;
linear(1000000);
while(1){
scanf("%d",&n);
if(n==0)break;
for(i=1;i<=tot;i++){
a=prime[i];
c=n-prime[i];
if(b[c]==0){
printf("%d = %d + %d\n",n,a,c);
break;
}
}
if(i>tot)printf("Goldbach's conjecture is wrong.\n");
}
return 0;;
}
该题收获,线性筛若长久不编,还是容易出错。