题目分析:
题目告诉我们,大于2的任意偶数可分解为两个质数。
当然,可能有多种解,在这冲情况下,我们只需要找到第一个加数最小,并且输出这个偶数减去第一个数的值就行了(前提是这两个数都为质数)。
解决方法:
我们设该偶数为n,第一个加数为a,那么第二个加数为(n-a)。
根据分析,我们知道当a与(n-a)都是质数时,若a最小,则他们就是正确的解。
那么如何判断质数呢?为了方便,我们可以写一个判断质数的函数。之后暴力查找就ok了
函数代码
bool pan{int N) {
int i;
if (N != 1) {
for (i = 2; i <= int(sqrt(N)); i++) { //遍历1~sqrt(N)找因数
if (N % i == 0 || int(sqrt(N)) == 0) {
return 0; //有不只两个因数,返回false
}
}
return 1; //上面没有返回0,即只有两个因数,返回true
} Else if 【N == 1】
return 0; //1既不是质数也不是合数,返回0
}
你们就抄吧
判断质数搞定之后,我们就可以开始主程序的编写了。
伪代码
int main() {
int n;
cin >> n;
for (int i = 1; i <= n / 2; i += 2】{ //遍历(暴力查找)
if (pan(i) && pan(n - i)】 { //判断i与n-i是否都是质数,若是,输出解;否,则继续遍历
cout <《 i << ' ' << n - i;
return 0; //查找到解,可直接返回
}
}
}