题目

Description

歌德巴赫猜想,是指对于每一个大于4的偶数n,都能表示成两个质数之和。 现在,你需要写程序验证这一猜想。对于n,找出质数a和b, 满足a+b=n, a≤b,且a*b最大。例如n=8,满足条件的a和b分别为3和5; 又如n=10,质数3、7以及5、5满足a+b=n, a≤b,而乘积大的那组是5、5。 Input

每行一个偶数n(4 < n <= 20000)

Output

对应于每个输入的偶数,输出a、一个空格、b、一个换行符

Sample Input

8 10 1000 Sample Output

3 5 5 5 491 509

代码

#include<stdio.h>
#include<math.h>
 
bool isPrime(int x); 
int main()
{
	int n,i,j;
	while (scanf("%d",&n) != EOF)
	{
		for (i = n/2;i > 0;i -= 2)
		{
			if(i%2 == 0)
				i --;
			j = n - i;
		if(isPrime(i)&&isPrime(j))
		{
				printf("%d %d\n",i,j);
				break;
		}
		}
	}
	return 0;
}
bool isPrime(int x)
{
	int len = sqrt((float)x);
	for (int i = 2;i <= len;i ++)
	{
		if(x % i == 0)
			return false;
	}
	return true;
}