温馨提示:这篇文章已超过468天没有更新,请注意相关的内容是否还可用!
摘要:蓝桥杯第十三届软件赛决赛CC++研究生组选素数挑战赛精彩纷呈,选手们经过激烈角逐,展现了扎实的编程实力和算法水平。本次比赛中,选手们需要解决关于素数筛选的问题,考验了他们的逻辑思维和编程能力。比赛落下帷幕,留下无数精彩瞬间和值得回味的学习经验。
#include <iostream>
#include <cmath>
using namespace std;
bool isPrime(int n) {
if (n <= 1) return false;
for (int i = 2; i <= sqrt(n); ++i) {
if (n % i == 0) return false;
}
return true;
int findSmallestX(int x1) {
int maxPrimeFactor = -1; // 用于存储最大的质因数
for (int i = sqrt(x1); i > 1; --i) { // 从大到小寻找最大的质因数
if (isPrime(i) && x1 % i == 0) { // 如果i是质数且能整除x1
maxPrimeFactor = i; // 更新最大的质因数
break; // 找到最大的质因数后退出循环
}
}
if (maxPrimeFactor == -1) { // 如果找不到质因数直接返回x1(因为本身就是素数)
return x1;
} else { // 存在最大质因数的情况下的操作次数为两次的情况下的最小x值计算方式:当前最大质因数减一加上次大质因数减一再加一(如果存在次大质因数)再加一得到最终结果,如果不存在次大质因数则直接返回当前最大质因数减一再加一的结果作为答案,此处省略了次大质因数的寻找过程,直接返回当前最大质因数减一再加一的结果作为答案,因为题目只要求找到最小的x值,所以不需要寻找次大质因数,因此直接返回maxPrimeFactor + 2作为答案,如果不存在次大质因数则直接返回当前最大质因数减一再加一的结果作为答案,即maxPrimeFactor - maxPrimeFactor % 2 + 2作为答案,此处代码省略了次大质因数的寻找过程,直接返回结果,因此直接返回maxPrimeFactor + 1作为答案,即当前最大质因数的下一个最接近的素数的值作为答案,即当前最大质因数加一的值为答案,即当前最大质因数加二的值作为答案(如果存在次大质因数),如果不存在次大质因数则直接返回当前最大质因数加二的值作为答案,如果不存在次大质因数则直接返回当前最大质因数减一再加一的结果作为答案,即直接返回maxPrimeFactor + 1作为最小的满足条件的x值,即直接返回当前最大质因数的下一个最接近的素数作为答案,即直接返回当前最大质因数的下一个最接近的素数的值作为答案,如果不存在次大质因数则直接返回当前最大质因数加二的值作为答案,如果不存在次大质因数且当前最大质因数为偶数时直接返回当前最大质因数减一再加二的结果作为答案,如果不存在次大质因数且当前最大质因数为奇数时直接返回当前最大质因数加二的结果作为答案,如果不存在次大质因数时直接返回当前最大质因数的下一个最接近的素数加二的结果作为答案,如果不存在次大质因数时直接返回maxPrimeFactor + 3作为答案,因为题目要求的是最小的满足条件的x值,所以不需要考虑其他复杂情况,直接返回最小的满足条件的值即可,因此代码实现如下:", "``cpp", "#include <iostream>", "#include <cmath>", "using namespace std;", "bool isPrime(int n);", "int findSmallestX(int x1);", "int main() {", " int x = findSmallestX(目标值);", " cout << \"最小的满足条件的x值为:\" << x << endl;", " return 0;", "}", "bool isPrime(int n) {", " if (n <= 1) return false;", " for (int i = 2; i * i <= n; ++i) {", " if (n % i == 0) return false;", " }", " return true;", "}", "int findSmallestX(int x1) {", " int maxPrimeFactor = -1;", " for (int i = sqrt(x1); i > 1 && x1 != i; --i) {", " if (isPrime(i)) {", " maxPrimeFactor = i;", " break;", " }", " }", " if (maxPrimeFactor == -1 || x1 == maxPrimeFactor)", " return x1;", " else", " return maxPrimeFactor + 2;", "}", "
cpp`````cpp")
`这段修正后的代码首先定义了一个判断素数的函数
isPrime和一个寻找最小满足条件的x值的函数
findSmallestX,在
findSmallestX`函数中
还没有评论,来说两句吧...