题目描述
例如6=3+3,8=3+5,18=7+11。迄今为止,这仍然是一个著名的世界难题,被誉为数学王冠上的明珠。试编写程序,验证任一大于2的偶数都能写成两个质数之和。(可能有多种情况,请输出两数差最大的那组)
输入要求
输入一个大于2的偶数N。
输出
输出两个质数和的形式,小的质数在前,大的质数在后。
穷举遍历就行了
代码如下,如有帮助,请帮忙采纳一下,谢谢。
#include <stdio.h>
#include <stdlib.h>
int isprime(int n)
{
int i=2;
if(n<2) return 0;
for(i=2;i<n;i++)
{
if(n%i == 0) return 0;
}
return 1;
}
int main()
{
int N;
int i,j;
int *p,cnt = 0;
int flag = 0;
scanf("%d",&N);
p = (int*)malloc(sizeof(int)*N);
for(i=2;i<N;i++)
{
if(isprime(i))
p[cnt++] = i;
}
for (i=0;i<cnt-1;i++)
{
for(j=i+1;j<cnt;j++)
{
if(p[i]+p[j] == N)
{
flag = 1;
printf("%d+%d=%d\n",p[i],p[j],N);
}
}
}
if(flag == 0)
printf("没有找到答案");
free(p);
p = 0;
return 0;
}
供参考:
#include <stdio.h>
int isPrime(int n)
{
int i;
if (n <= 3) return n > 1;
for (i = 2; i * i <= n; i++)
if (n % i == 0) return 0;
return 1;
}
int main()
{
int i, n;
while (scanf("%d", &n) == 1 && n > 0) // 输入 <= 0 时,结束输入
{
for (i = 2; i <= n / 2; i++) {
if (isPrime(i) && isPrime(n - i))
{
printf("%-d=%-d+%-d\n", n, i, n - i);//输出
break;
}
}
}
return 0;
}