题目描述:
给定正整数 n,请问有多少个质数是 n 的约数。
输入格式:
输入的第一行包含一个整数 n。
输出格式:
输出一个整数,表示 n 的质数约数个数。
数据范围:
对于 30% 的评测用例,1≤n≤10000。
对于 60% 的评测用例,1≤n≤1e9。
对于所有评测用例,1≤n≤1e16。
输入样例:
396
输出样例:
3
样例解释:
396 有 2,3,11 三个质数约数。
分析步骤:
第一:理清思路:
看到这个题目要求质因数个数,脑海中就应该立马出现试除法,线性筛,埃氏筛法....这一系列的方法,对于这道题目我们可以用试除法最简单了,因为试除法的时间复杂度为O(根号n)所以最大就是O(10^8)是可以算出来的。
第二:书写主函数,构建整体框架:
我们输入值,用for循环让i从2开始,因为2是最小的质因子,在判断一下i是否是n的约数,如果是的话,就计数器加加,再给他除干净,我们这么样处理的话我们就可以保证我们计数器每次加加都能是质因子。最终经过一系列的处理,如果i还是大于1的话就代表这个数也是质数还得加加。
最后输出就可以。
代码:
cpp
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
typedef long long LL;
LL n;
int main()
{
cin>>n;
int res = 0 ;
for(LL i = 2; i <= n / i; i ++){
if(n % i == 0){
res++;
while(n % i == 0){
n /= i;
}
}
}
if(n > 1) res++;
cout<<res;
return 0;
}