题目链接
题目大意:
解题想法:
首先理解下该题意思,就是说找出一个数中质数的因数个数,比如49的质数的因数就是7×7,两个。
这里就有一个很巧妙的方法,那就是直接从2那边开始一直遍历到sqrt(n),这样找出来的因数一定就是质因数。比如说是n=64,那么你可能会想,哎呀,如果是因数8的话,是不是就不是质数了嘞?那么我想说你考虑多了,因为这个8会被分解为2×2×2,也就是质因数2,所以是先从2开始遍历的,是有道理的,根本不会选择到除去质因数之外的因数。
最后要记得算上一个ans++,即算上直接n本身就是质数的情况。
ac代码:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main()
{
int n;
int flag;
int ans;
while(scanf("%d",&n)!=EOF){
ans = 0;
for(int i = 2;i <= sqrt(n);i++){
while(n%i==0){//比如有多个因子是2的,就一次性算够这个质因子数
// printf("i:%d\n",i);
ans++;
n = n/i;
}
if(n<=1) break;
}
if(n>1) ans++;//比如说n=7时,上面for循环根本就遍历不到7,故就算上其本身,则ans++
printf("%d\n",ans);
}
return 0;
}