测评会员优惠活动进行中 · 开通 VIP,有效期内测评不限次 VIP 优惠中 · 测评不限次 立即查看

A52022. 质数的和与积

填空题 困难

题目描述

质数的和与积

题目描述

两个质数的和是S,它们的积最大是多少?

输入

一个不大于10000的正整数S,为两个质数的和。

输出

一个整数,为两个质数的最大乘积。数据保证有解。

样例输入

50

样例输出

589

参考答案

#include <iostream> #include <cmath> #include <cstring> using namespace std; const int N = 10000; int prime[N+1]; void esieve(int n) { memset(prime, 1, sizeof(prime)); prime[1] = 0; // 筛选 int max = sqrt(n); for(int i=2; i<=max; i++) if(prime[i]) for(int j=i+i; j <= n; j+=i) prime[j] = 0; } int main() { int s; esieve(N); cin >> s; if(s & 1) if(prime[s- 2]) cout << 2 * (s - 2) << endl; else cout << 0 << endl; else { int i, j; i = j = s / 2; while(prime[i] == 0 || prime[j] == 0) i++, j--; cout << i * j << endl; } return 0; }
上一题 下一题