历年CSP-J复赛真题解析 | 2012年T1 质因数分解

​欢迎大家订阅我的专栏:算法题解:C++与Python实现!
本专栏旨在帮助大家从基础到进阶 ,逐步提升编程能力,助力信息学竞赛备战!

专栏特色
1.经典算法练习:根据信息学竞赛大纲,精心挑选经典算法题目,提供清晰的代码实现与详细指导,帮助您夯实算法基础。
2.系统化学习路径:按照算法类别和难度分级,从基础到进阶,循序渐进,帮助您全面提升编程能力与算法思维。

适合人群:

  • 准备参加蓝桥杯、GESP、CSP-J、CSP-S等信息学竞赛的学生
  • 希望系统学习C++/Python编程的初学者
  • 想要提升算法与编程能力的编程爱好者

附上汇总贴:历年CSP-J复赛真题解析 | 汇总_热爱编程的通信人的博客-CSDN博客


【题目来源】

洛谷:P1075 [NOIP 2012 普及组] 质因数分解 - 洛谷 (luogu.com.cn)

【题目描述】

已知正整数 n n n 是两个不同的质数的乘积,试求出两者中较大的那个质数。

【输入】

输入一个正整数 n n n

【输出】

输出一个正整数 p p p,即较大的那个质数。

【输入样例】

21

【输出样例】

7

【算法标签】

《洛谷 P1075 质因数分解》 #数学# #素数判断,质数,筛法# #NOIP普及组# #2012#

【代码详解】

#include   // 包含标准库头文件
using namespace std;

// 判断素数的辅助函数
bool fun(int n) {
    if (n <= 1) return false;  // 1和负数不是素数
    for (int i = 2; i < sqrt(n); i++) {  // 只需检查到√n的范围
        if (n % i == 0) return false;   // 发现能整除的因子
    }
    return true;  // 未发现因子则是素数
}

int main() {
    int n;  // 存储输入的正整数
    cin >> n;  // 读取输入
  
    // 遍历2到n寻找满足条件的因子
    for (int i = 2; i <= n; i++) {
        if (n % i == 0) {  // 如果i是n的因子
            // 检查i和n/i是否都是素数
            if (fun(i) && fun(n / i)) {
                cout << n / i;  // 输出较大的素数因子
                break;  // 找到后立即退出循环
            }
        }
    }
  
    return 0;  // 程序正常结束
}

【运行结果】

21
7

你可能感兴趣的:(c++)