POJ NOI MATH-7827 质数的和与积(Bailian4138)
2017-04-04 17:44
225 查看
问题链接:POJ NOI MATH-7827 质数的和与积。
问题链接:Bailian4138
质数的和与积。
总时间限制:1000ms内存限制: 65536kB描述
两个质数的和是S,它们的积最大是多少?
输入一个不大于10000的正整数S,为两个质数的和。输出一个整数,为两个质数的最大乘积。数据保证有解。样例输入
样例输出
来源《奥数典型题举一反三(小学五年级)》 (ISBN 978-7-5445-2882-5) 第三章 第二讲 例1
问题分析
需要注意特殊的情形,例如输入的S为4。
程序说明
程序中,使用埃拉托斯特尼筛选法计算小于10000的素数。
似乎输入的S不为两个素数之和时,需要输出0。
AC的C++语言程序:
问题链接:Bailian4138
质数的和与积。
总时间限制: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; }
相关文章推荐
- POJ NOI MATH-7655 回文数个数
- POJ NOI MATH-7826 分苹果
- POJ NOI MATH-7657 连乘积末尾0的个数
- POJ NOI MATH-7654 等差数列末项计算
- POJ NOI MATH-7651 自来水供给
- POJ NOI MATH-7647 余数相同问题
- POJ NOI MATH-7656 李白的酒
- POJ NOI MATH-7832 最接近的分数
- POJ NOI MATH-7829 神奇序列求和
- POJ NOI MATH-7648 蓄水池水管问题
- POJ NOI MATH-7650 不定方程求解(Bailian4139)
- POJ NOI MATH-7831 计算星期几
- POJ NOI MATH-7653 地球人口承载力估计
- POJ NOI MATH-7833 幂的末尾
- POJ NOI MATH-7828 最大公约数与最小公倍数
- POJ NOI MATH-7649 我家的门牌号
- POJ NOI MATH-7652 乘积最大的拆分
- POJ NOI MATH-7830 求小数的某一位
- poj 1190 noi99 生日蛋糕
- noi-8163-第n小的质数