哥德巴赫猜想是任意一个大于4的偶数可以拆称两个奇质数的和,多组输入,给定一个n,
求是否有一组奇质数满足上述,当有多组的时候求差值最大的一组
n ∈ [6,1e6]
# 题解
预处理所有的质数,在所有的质数中除了2以外全是奇数,所以特判掉即可,确定一个素数,通过n-p 判定是否为素数即可
素数从小到大枚举保证了差值最大
1 #include<bits/stdc++.h> 2 using namespace std; 3 const int N=1e6+10; 4 int p[N],cnt; 5 bool st[N]; 6 int n; 7 void get_primes(int n){ 8 for(int i=2;i<=n;i++){ 9 if(!st[i]) p[cnt++]=i; 10 for(int j=0;p[j]<=n/i;j++){ 11 st[p[j]*i]=true; 12 if(i%p[j]==0) break; 13 } 14 } 15 } 16 int main(){ 17 get_primes(N); 18 while(cin>>n,n){ 19 for(int i=1;i<cnt;i++){ 20 int a=p[i]; 21 int b=n-a; 22 if(!st[b]){ 23 printf("%d = %d + %d\n",n,a,b); 24 break; 25 } 26 27 } 28 } 29 }