题目及要求:
给定正整数 n,请问有多少个质数是 n 的约数。
输入格式
输入的第一行包含一个整数 n。
输出格式
输出一个整数,表示 n�的质数约数个数。
数据范围
对于 30%的评测用例,1≤n≤10000
对于 60%60% 的评测用例,1≤n≤10^9。
对于所有评测用例,1≤n≤10^16。
输入样例:
396
输出样例:
3
样例解释
396396 有 2,3,112,3,11 三个质数约数。
求解及讲解
代码介绍:
1.由于n的数据有点大,故采用long long类型保存n,用typedef long long为LL;
2.由于n可以划分成多个质数的乘积,故不需要去单独判断i是不是质数;
3.当i为n的质数时,计数加一,并且把n里面所有的这个i除尽,这样就可以确保除以的i(能够整除)一定是质数;
4.最后一个判断n是不是大于1,是为了判断最后的n本身是不是一个质数;
5.注意:LL类型的数据,输入和输出都要为%lld;
代码如下:
#include<stdio.h>
typedef long long LL;
int main()
{
LL n, sum = 0;
scanf("%lld", &n);
for (LL i = 2; i * i <= n; i++)
{
if (n % i == 0)
{
while(n%i==0)n/=i;
sum++;
}
}
if(n>1)sum++;
printf("%lld", sum);
return 0;
}