[保研/考研机试] KY7 质因数的个数 清华大学复试上机题 C++实现

描述

求正整数N(N>1)的质因数的个数。 相同的质因数需要重复计算。如120=2*2*2*3*5,共有5个质因数。

输入描述:

可能有多组测试数据,每组测试数据的输入是一个正整数N,(1<N<10^9)。

输出描述:

对于每组数据,输出N的质因数的个数。

示例1

输入:

cpp 复制代码
120

输出:

cpp 复制代码
5

思路:

只需要判断因数是否能够整除当前的数,而无需判断因数本身是否为质数。质因数分解是将一个数分解为一系列质数的乘积,而我们只需要关注能够整除的因数,因为如果一个非质数能够整除当前的数,那么它一定可以被分解为更小的因数的乘积。

例如,考虑将120分解为质因数的过程:

120= 2 * 60

60 = 2 * 30

30 = 2 * 15

15 = 3 * 5

在这个过程中,我们并没有判断2、3、5是否为质数,只需要判断它们能否整除当前的数。因为即使它们不是质数,它们也可以分解为更小的因数的乘积,而最终会得到正确的质因数分解结果。

在质因数分解问题中,我们只需要关注因数能否整除当前的数,而无需判断因数本身是否为质数,极大减少了代码的冗余运算,但依然可以得到正确的结果。

源代码:

cpp 复制代码
#include<iostream>
#include<cmath>
using namespace std;

//例题6.9 质因数的个数
int main()
{
    int n;
    while (cin >> n) {
        int res = 0;
        for (int i = 2; i <= sqrt(n); i++) {
            while (n % i == 0) {
                res++;
                n /= i;
            }
        }
        if (n > 1) {
            res++;
        }
        cout << res << endl;
    }

    return 0;
}

提交结果:

编辑切换为居中

添加图片注释,不超过 140 字(可选)

相关推荐
星栈独行3 小时前
翻完 Pi 源码:它和 Codex、Claude Code 有何不同
开发语言·javascript·人工智能·程序人生
2601_954526753 小时前
【工业传感与算法实战】温漂补偿与零点抗漂破局:基于二阶多项式拟合的 C/C++ 边缘校准算法,深度拆解“压力变送器什么牌子好”的技术硬指标
c语言·c++·算法
qq_448011163 小时前
C语言中的变量和函数的定义与声明
android·c语言·开发语言
code_pgf3 小时前
`unordered_map` 详解
c++
叩码以求索4 小时前
浅谈:算法萌新如何高效刷题应对面试(一)
算法·面试·职场和发展
孫治AllenSun4 小时前
【DataX】生产环境搭建DataX集群案例
java·开发语言·jvm
一拳一个呆瓜5 小时前
【STL】iostream 编程:检测提取操作产生的错误
c++·stl
稚南城才子,乌衣巷风流5 小时前
判断素数与拓展应用
c++
众少成多积小致巨5 小时前
C++ 规范参考(下)
c++
c238565 小时前
把 C++ 内存分配拆透:new 与 malloc 的三层血缘
开发语言·c++·算法