POJ 2262 Goldbach's Conjecture(数论)

Description
输入一个不小于6的合数,把它表示成两个质数的和,如果有多个,输出相差最大的一组
Input
多组输入,每组用例一个合数,以0结束输入
Output
对于每组用例,用两个相差最大的质数和来表示此合数,如果不存在,则输出Goldbach’s conjecture is wrong.
Sample Input
8
20
42
0
Sample Output
8 = 3 + 5
20 = 3 + 17
42 = 5 + 37
Solution
简单的枚举+素数判定
Code

#include<stdio.h> 
#define MAX 1000001 
int prime[MAX]={0};  
void sushu()//打表 
{ 
    int i,j; 
    for(i=2;i<MAX;i++) 
        if(!prime[i]) 
            for(j=2;i*j<MAX;j++) 
                prime[j*i]=1;
    prime[0] = prime[1] = 1;  
} 
int main() 
{ 
    int n,i; 
    sushu(); 
    while (scanf("%d",&n)==1,n)  
    { 
        for(i=3;i<=n/2;i+=2)//枚举 
            if(prime[i]==0&&prime[n-i]==0)//找到可行解 
            {
                printf("%d = %d + %d\n", n, i, n-i);//按格式输出 
                break; 
            }
        if(i>n/2)//不存在符合条件的质数 
            printf("Goldbach's conjecture is wrong.\n"); 
    } 
    return 0; 
}

你可能感兴趣的:(POJ 2262 Goldbach's Conjecture(数论))