11 条题解
-
14
#include <iostream> using namespace std; bool prime(int x) { if (x < 2) { return 0; } for (int i = 2; i * i <= x; i++) { if (x % i == 0) { return false; } } return true; } int main() { int n, a; cin >> n; a = 0; for (int i = 1; i <= n; i++) { int j = n - i; if (prime(i) && prime(j)) { if ((i * j) > a) { a = i * j; } } } cout << a; return 0; }
失踪人口回归!
1.先写一个布尔类型的自定义函数!用于判断参数是否为质数。(至于为什么不详细讲该函数,
因为我懒当然是因为上课用了很多遍了,懒得再讲大家肯定都会了!)2.定义输入变量 n 和 统计变量 a !因为 a 要储存最大的质数积,所以我们先将 a 定义的小一点。
3.用 for 循环遍历从 1 到 n 的所有数字,再用变量 j 存储 n - i 的差。
4.我们用自定义 prime 函数判断 i 和 j 是不是质数,因为题目要求的是两个质数,所以必须 i 和 j 都是质数才能进行下一步。
5.判断 i 和 j 的和是否大于统计变量 a 如果是就将 i * j 赋值给变量 a 。
6.最后将输出(统计)变量 a 输出。
7.点点赞吧!👍 每一个赞都是我前进的动力!
-
2
#include <bits/stdc++.h> using namespace std; bool isprime(int a){ int flag=2; if (a==1) flag=1; for (long long i=2;i*i<=a;i++){ if (a%i==0){ flag=3; break; } } if (flag==2) return true; else return false; } int main(){ int n,maxn=0; cin>>n; for (int i=1;i<=n;i++){ if (isprime(n-i)&&isprime(i)){ if (i*(n-i)>maxn) maxn=i*(n-i); } } cout<<maxn; return 0; }
#include <bits/stdc++.h> using namespace std; bool isprime(int a){ int flag=2; if (a1) flag=1; for (long long i=2;i*i<=a;i++){ if (a%i0){ flag=3; break; } } if (flag==2) return true; else return false; } int main(){ int n,maxn=0; cin>>n; for (int i=1;i<=n;i++){ if (isprime(n-i)&&isprime(i)){ if (i*(n-i)>maxn) maxn=i*(n-i); } } cout<<maxn; return 0; }
-
2
#include <iostream> using namespace std; int main() { int a,b,c,m=-1,f; cin>>a; for (int i=3;i<=a/2+1;i++) { b=i; c=a-i; f=1; for (int q=2;q<=b-1;q++) { if (b%q==0) { f=0; break; } } for (int h=2;h<=c-1;h++) { if (c%h==0) { f=0; break; } } if (f==1) { if (c*b>m) m=c*b; } } cout<<m; return 0; }//这节课没学,先做一下。听说是用函数,但没学。
-
2
解析
输入一个数n,将n分成两个数i和j,要求i和j都是素数,求i*j的乘积最大值
枚举i的可能情况,判断每一种情况下,i和j是不是都是素数,并维护乘积最大值。
题解
#include <iostream> using namespace std; bool isP(int x) { if (x < 2) return 0; for (int i = 2; i * i <= x; i++) if (x % i == 0) return false; return true; } int main() { int n, ans; cin >> n; ans = 0; for (int i = 1; i <= n; i++) { int j = n - i; if (isP(i) && isP(j)) ans = max(ans, i * j); } cout << ans << "\n"; return 0; }
-
1
`` #include <bits/stdc++.h> using namespace std; bool prime(int (n)) { if (n<2)return false; for(int i=2;ii<=n;i++){ if (n%i0)return false; }return true; } int main() { int s; cin>>s; if (s%20) { if (prime(s/2)) {cout<<(s/2)(s/2); return 0;} else { int i=s/2,i2=s/2; while (prime(i)!=1||prime(i2)!=1) { i--;i2++;
} cout<<i*i2; return 0; } } else{ { int i=s/2,i2=s/2; while (prime(i)!=1||prime(i2)!=1) { i--;i2++; } cout<<i*i2; return 0; } }
} ``
不知道是不是能提供一个新思路·
-
1
1.先写一个布尔类型的自定义函数!用于判断参数是否为质数。
2.定义输入变量 s和 统计变量 maxn !因为 maxn 要储存最大的质数积,所以我们先将 maxn 定义的小一点。
3.用 for 循环遍历从 1 到 s 的所有数。
4.我们用自定义 prime 函数判断 j和 s - j是不是质数,因为题目要求的是两个质数,所以必须 j和 s - j都是质数才能进行下一步。
5.判断 j和 s - j的乘积是否大于统计变量 maxn 如果是就将 j和 s - j 的乘积赋值给变量 maxn 。
6.最后将输出(统计)变量 maxn 输出。
点点“亿”赞吧!👍 !~~
#include <iostream> using namespace std; bool prime(int i) { if (i < 2) return false; for (int j=2; j*j <= i; j++) if (i % j == 0) return false; return true; } int main() { int s,maxn = -1; cin >> s; for (int j = 1;j <= s;j++) if (prime(j) && prime(s - j)) if (maxn < j * (s - j)) maxn = j*(s - j); cout << maxn; return 0; }
-
1
#include<bits/stdc++.h> using namespace std; bool jntm(int n) { if (n<2) return false; for (int i=2;i*i<=n;i++) { if (n%i==0) return false; } return true; } int main() { int s,maxn=-1; cin>>s; for (int j=2;j<=s-2;j++) { int k=s-j; if (jntm(j) && jntm(k)) { if (j*k>maxn) maxn=j*k; } } cout<<maxn; return 0; }
-
0
思路:
因为题目说要求和为s的两个质数的积的最大值, 拆分一下就是要实现两个功能:判断是否是质数和求最大值。
求最大值写不写自定义函数都行,在判断完两个数是否是质数以后用max()函数求当前的最大值与两个质数的积哪个更大就行
主要是判断是否是质数
判断其实不难,可以写个自定义函数,不写也行
具体方法是枚举2到 这个数-1 之间所有的数字,如果有一个是这个数的因数,就说明这个数不是质数
最后说一下可以优化的几个点:
首先,枚举两个数并不需要写for循环嵌套,因为我们已经知道了两个数的总和,可以直接用 总和-循环变量 算出第二个数
还有,枚举范围并不需要枚举2到总和,可以缩小一丁点,枚举2到 总和-2,因为 总和 = 两个质数相加,而其中一个质数最小为2
#include <iostream> using namespace std; int maxn = 0; void f(int x1,int x2,int &maxn) { int ans = x1 * x2; maxn = max(ans,maxn); } bool prime(int n) { for(int i = 2;i < n;i++) { if(n % i == 0) return false; } return true; } int main() { int s; cin >> s; for(int i = 2;i <= s - 2;i++) { if(prime(i) && prime(s - i)) f(i,s - i,maxn); } cout << maxn; return 0; }
-
-1
#include<iostream> using namespace std; bool check(int n) { if(n==0 || n==1) { return false; } for(int i=2;i<n;i++) { if (n%i==0) { return false; } } return true; } int main() { int sum,ans=0; cin >> sum; for(int i=sum;i>=0;i--) { if (check(i) && check(sum-i)) { if (i*(sum-i)>=ans) { ans=i*(sum-i); } } } cout << ans; return 0; }
-
-2
这道题主打一个模拟法。
#include<iostream> using namespace std; bool prime(int n) { if(n<2) { return false; } for(int i=2;i<n;i++) { if(n%i==0) { return false; } } return true; } int main() { int s,nums[10001][3],nums_i=1,max_value=-1; cin>>s; for(int i=2;i<=s/2;i++) { if(prime(i) and prime(s-i)) { nums[nums_i][1]=i; nums[nums_i][2]=s-i; nums_i++; } } for(int i=1;i<nums_i;i++) { if(nums[i][1]*nums[i][2]>max_value) { max_value=nums[i][1]*nums[i][2]; } } cout<<max_value; return 0; }
- 1
信息
- ID
- 304
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- 4
- 标签
- 递交数
- 1128
- 已通过
- 551
- 上传者