题目 2692:
蓝桥杯2022年第十三届省赛真题-质因数个数
时间限制: 4s 内存限制: 320MB 提交: 9051 解决: 1130
题目描述
给定正整数 n,请问有多少个质数是 n 的约数。
输入格式
输入的第一行包含一个整数 n。
输出格式
输出一个整数,表示 n 的质数约数个数。
样例输入
复制
396
样例输出
复制
3
提示
396 有 2, 3, 11 三个质数约数。
对于 30% 的评测用例,1 ≤ n ≤ 10000。
对于 60% 的评测用例,1 ≤ n ≤ 109。
对于所有评测用例,1 ≤ n ≤ 1016。
解题思路:
- 先循环求该数的质数
- 再判断这个质数是不是它的因数
- 再除以这个因数,直到不能除,防止有重复的因数增加遍历次数,例如72=2*2*2*3*3,这里只要求2,和三两个质数,其他就可以直接忽略,不需要那么多2,3计算。
- 这个要开long long 类型,不然有些测试用例过不去
#include<stdio.h>
#include<math.h>
int main()
{
long long n,count=0;
scanf("%lld",&n);
for(long long i=2;i<=sqrt(n)&&n>1;i++){ //求解其质数
if(n%i==0) //如果是质数,且是它的因数,就加一
count++;
while(n%i==0) //除以相同的因数,减少计算
n/=i;
}
if(n>1) //如果最后还剩数字,且大于一,肯定也是质数和因数
count++;
printf("%lld",count);
return 0;
}