HJ60. 查找组成一个偶数最接近的两个素数
描述
输入描述
输入一个大于2的偶数
输出描述
从小到大输出两个素数
示例1
输入:
20
输出:
7 13
示例2
输入:
4
输出:
2 2
C 解法, 执行用时: 1ms, 内存消耗: 264KB, 提交时间: 2020-12-09
#include <stdio.h> int main(void) { char flag; int i, j, k, num; for( ; scanf("%d", &num)!=EOF; ){ i=num>>1; flag=1; for(j=2; j*j<=i; j++) if(i%j==0){ flag=0; break; } if(flag){ if(i%2) { printf("%d\n%d\n", i, i); continue; } if(i==2) { printf("2\n2\n"); continue; } } for(i--; i>=2; i--){ flag=1; for(j=2; j*j<=i; j++) if(i%j==0){ flag=0; break; } if(flag){ k=num-i; for(j=2; j*j<=k; j++) if(k%j==0){ flag=0; break; } if(flag){ printf("%d\n%d\n", i, k); break; } } } } return 0; }
C 解法, 执行用时: 1ms, 内存消耗: 332KB, 提交时间: 2021-09-09
#include <stdio.h> int isSuNumber(int x) { for(int i = 2; i * i <= x; i++) { if(x % i == 0) return 0; } return 1; } int main () { int n = 0; while(scanf("%d", &n) != EOF) { int a = 2; int b = n - a; int minDelt = 0; if(a > b) minDelt = a - b; else minDelt = b - a; for(int i = 3; i <= n/2; ) { if(isSuNumber(i) && isSuNumber(n - i)) { if(n - 2 * i < minDelt) { minDelt = n - 2 * i; a = i; b = n - i; } } i += 2; } printf("%d\r\n%d\r\n", a, b); } return 0; }