C++ OpenJudge 2.1基本算法之枚举7827:质数的和与积题解
总时间限制: 1000ms 内存限制: 65536kB
描述
两个质数的和是S,它们的积最大是多少?
输入
一个不大于10000的正整数S,为两个质数的和。
输出
一个整数,为两个质数的最大乘积。数据保证有解。
样例输入
50
样例输出
589
来源
《奥数典型题举一反三(小学五年级)》 (ISBN 978-7-5445-2882-5) 第三章 第二讲 例1
思路
从1~n-2逐个算:
这个数是不是个质数。
n - 这个数是不是个质数。
这两个数乘起来是不是个质数。
解决好这些题目就简单了。
#include<iostream>
using namespace std;
bool isPrime(int n) {//算n是不是质数
if(n==1||n==0) {
return false;
}
for(int i=2;i<n;i++) {
if(n%i==0) {
return false;
}
}
return true;
}
long long nmax=-1;//最大值
int main() {
long long n;
cin>>n;
for(long long i=1;i<=n-2;i+=2) {//小小的剪枝
if(isPrime(i)&&isPrime(n-i)) {
long long s=i*(n-i);
if(s>nmax) {//比较
nmax=s;
}
}
}
cout<<nmax;
return 0;
}