1405 两素数的和与最大积

这个题首先对S

其中的一个素数进行穷举

当一个满足为素数时

借助和来求另一个素数

再通过判断此素数是否满足

最后

当两个数和确定后,若两个数的绝对值越小

其对应乘积越大

故得出答案

代码如下

 1 ///【题目描述】
 2 //两个质数的和是S,它们的积最大是多少?
 3 
 4 //【输入】
 5 //一个不大于10000的正整数S,为两个质数的和。
 6 
 7 //【输出】
 8 //一个整数,为两个质数的最大乘积。数据保证有解。
 9 
10 //【输入样例】
11 //50
12 //【输出样例】
13 //589
14 
15 #include<iostream>
16 #include<cmath>
17 using namespace std;
18 int dfs(int);
19 int u[1];
20 int S;
21 int main()
22 {
23     cin>>S;
24     cout<<dfs(S);
25 }
26 int dfs(int S)
27 {
28     int l,p,i,q,k,o=10000;
29     for(p=2;p<=S;p++)
30         {int k=0,h=0;
31          for(i=2;i<=sqrt(p);i++)
32             if(p%i==0) k++;
33         if(p==i) continue;
34          if(k==0) {
35          q=S-p;
36          for(i=2;i<=sqrt(q);i++)
37             if(q%i==0) h++;
38          if(h==0) l=abs(p-q);
39          if(l<o) {o=l;u[1]=q;}
40            }
41         }
42         return u[1]*(S-u[1]);
43 }

 

posted @ 2020-02-01 01:37  ·Iris  阅读(906)  评论(0编辑  收藏  举报