题目链接:质因数的个数
题目描述:
求正整数N(N>1)的质因数的个数。 相同的质因数需要重复计算。如120=2*2*2*3*5,共有5个质因数。
输入描述:
可能有多组测试数据,每组测试数据的输入是一个正整数N,(1<N<10^9)。
输出描述:
对于每组数据,输出N的质因数的个数。
示例:
输入:
120
输出:
5
代码:
#include <stdio.h>
int main(){
int pi=0; //记录质数数组prime里面质数的个数
int prime[1000]; //记录前1000个质数
int mark[10001]; //标记对应位是否为质数
for(int i=2; i<10000; i++) mark[i]=1; //把标记位全部置1
for(int i=2; i<100; i++){ //去掉非质数
for(int j=i*i; j<10000; j+=i){
mark[j]=0;
}
}
for(int i=2; i<10000; i++){
if(mark[i]) prime[pi++]=i; //如果是质数就添加到prime数组,并且数组指针向后移一位
}
int n;
while(scanf("%d", &n)!=EOF){ //可以读取多组数据
int count=0; //记录n的质因数个数
int i=0;
while(i<pi && n!=1){
if(n%prime[i]==0){ //prime[i]是n的一个质因数
n /= prime[i];
count++; //质因数个数加1
}else{
i++;
}
}
if(n>1) count++; //最后余下一个很大的质数
printf("%d\n", count); //输出结果
}
return 0;
}