【题目描述】
给定一个质数 n,问能否写成两个质数 a, b 的和,即 n = a + b, a, b, n均为质数;
【输入格式】
输入包括一个整数n (2 <= n <= 1e7);
【输出格式】
如果不存在这样的整数n, 输出 -1;
如果存在,输出a,b,以空格间隔开;
【解题思路】
(1)只存在2一个偶数质数;
(2)奇数 = 奇数 + 偶数:故a,b中必有一个为2,故只要(n - 2)为质数即输出 a,b;
(3)由于n - 2的存在,对n == 2 和 n == 3 进行特判;
【正确代码】
1 #include <iostream> 2 3 using namespace std; 4 5 int is_prime(int x) 6 { 7 int prime = 1; 8 for (int i = 2; i <= x / 2; i ++) 9 if(x % i == 0) 10 { 11 prime = 0; 12 break; 13 } 14 return prime; 15 } 16 17 int main() 18 { 19 int n; 20 scanf("%d", &n); 21 22 if(n == 2) puts("-1"); 23 else if(n == 3) puts("-1"); 24 else 25 { 26 if(is_prime(n - 2)) printf("%d %d", 2, n - 2); 27 else printf("-1"); 28 } 29 30 return 0; 31 }