排位赛(五)| B题

【题目描述】

  给定一个质数 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 }
上一篇:实践周4


下一篇:数论基础(不是