POJ NOI MATH-7827 质数的和与积
- 问题链接:POJ NOI MATH-7827 质数的和与积。
- 总时间限制:
- 1000ms
- 内存限制:
- 65536kB
- 描述
-
两个质数的和是S,它们的积最大是多少?
- 输入
- 一个不大于10000的正整数S,为两个质数的和。
- 输出
- 一个整数,为两个质数的最大乘积。数据保证有解。
- 样例输入
-
50
- 样例输出
-
589
- 来源
- 《奥数典型题举一反三(小学五年级)》 (ISBN 978-7-5445-2882-5) 第三章 第二讲 例1
问题分析
需要注意特殊的情形,例如输入的S为4。
程序说明
程序中,使用埃拉托斯特尼筛选法计算小于10000的素数。
似乎输入的S不为两个素数之和时,需要输出0。
AC的C++语言程序:
#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; }