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