51Nod 2642 质数的和与积 c/c++题解

题目描述

两个质数的和是S,他们的积最大是多少?
输入
一个不大于10000的正整数S,为两个质数的和。
输出
一个整数,为两个质数的最大乘积。数据保证有解。
输入样例
21
输出样例
38

题解:

求出≥s的第一个素数,把前面的素数都放入一个数组,然后开一个O(n2)的枚举即可。

代码:

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
using namespace std;typedef long long ll;
const int inf = 0x3f3f3f3f;
const ll  INF = 0x3f3f3f3f3f3f3f3f;
const double PI = acos(-1.0);
const double E = exp(1.0);
const int MOD = 1e9+7;
const int MAX = 1e5+5;
int s;int check[MAX];
int prime[MAX];
int tot = 0;
void get_prime()//埃筛素数
{memset(check,0,sizeof(check));for(int i = 2; i <= MAX; i++){if(!check[i]){prime[tot++] = i;for(int j = 2*i; j <= MAX; j += i){check[j] = 1;}}}
}int main()
{/*ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);*/get_prime();for(int i = 0; i < 20; i++){cout << prime[i] << " ";}cout << endl;while(cin >> s){int t = s/2;int index = lower_bound(prime,prime+tot,s) - prime;int max_m = -inf;for(int i = 0; i < index; i++){for(int j = i; j < index; j++)// 注意可以有相同的元素{if(prime[i]+prime[j] == s){if(prime[i]*prime[j] > max_m)max_m = prime[i]*prime[j];}}}cout << max_m << endl;}return 0;
}


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部