质因数分解
xiufanivan · · 个人记录
题目链接: 蓝桥杯2022年第十三届省赛真题-质因数个数
题目描述:
给定正整数 n,请问有多少个质数是 n 的约数。
输入格式:
输入的第一行包含一个整数 n。
输出格式:
输出一个整数,表示 n 的质数约数个数。
样例输入:
396
样例输出:
3
提示:
396 有 2, 3, 11 三个质数约数。
对于 30% 的评测用例,1 ≤ n ≤ 10000。
对于 60% 的评测用例,1 ≤ n ≤ 109。
对于所有评测用例,1 ≤ n ≤ 1016。
思路:
对于任意一个正整数 ,可以将它分解成n个质因子的乘积
例如:
36=2*2*2*3*3
20=2*2*5
由此定理可以发现,对于正整数来说,它的任意一个因数都是它质因数的乘积,所有因数即是它质因数乘积的各种组合,由此可以快速的分解出一个数的所有因数
代码:
#include<iostream>
#include<cmath>
using namespace std;
typedef long long LL;
LL n;
LL cnt = 0;
int main() {
cin >> n;
if (n == 1) {
cout << 0 << endl;
return 0;
}
LL i;
for (i = 2; i <= sqrt(n) && n > 1; i++) {
if (n % i == 0) cnt++;
while (n % i == 0) { // 去掉那些相同的质因子i
n /= i;
}
}
if (i > 1) cnt++; // 如果最后剩下的大于1,就加上余下的那个质因子
cout << cnt << endl;
return 0;
}