哥德巴赫猜想(数拆成质数和

# 题意

哥德巴赫猜想是任意一个大于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 }

猜你喜欢

转载自www.cnblogs.com/hhyx/p/12602659.html
今日推荐