POJ 2262 Goldbach's Conjecture(数论)

来源:互联网 发布:linux把用户从组中删除 编辑:程序博客网 时间:2024/06/06 05:52

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; }
0 0