附件2 :
大学生程序设计竞赛样题(更多样题参见172.24.10.6)
Description
著名的哥德巴赫猜想是:每个不小于6的偶数都可以表示为两个奇素数之和。
例如,16=3+13=5+11。
下面需要你来编程验证一下哥德巴赫猜想是否正确。
Input
在输入的若干行数据中,每行仅有一个偶数N(6<=N<=2000000000)。
Output
你需要输出N行数据,每行以升序输出两个素数,这两个素数的和等于输入中的那个偶数,如果有多种选择,输出乘积最大的,例如N==16时,输出511,而不是313。
当你发现偶数N不能拆分成两个素数时,请立刻放下手中的程序,直接到A9找校长,因为你和大连东软信息学院都将名垂青史。
Sample Input
6
16
20
Sample Output
3 3
5 11
7 13
C语言答案供参考:
#include<stdio.h>
#include<math.h>
int is_prime(int n)
{
int m=sqrt(n);
int i;
for(i=2;i<=m;++i)
if(n%i==0) return 0;
return 1;
}
void main()
{
int n;
while(scanf("%d",&n)!=EOF)
{
int m=n/2;
if(m%2==0) --m;
while(1)
{
if(is_prime(m)&&is_prime(n-m))
{
printf("%d %d\n",m,n-m);
break;
}
else m-=2;
}
}
}。