问题 C: 质因数的个数
题目描述
求正整数N(N>1)的质因数的个数。
相同的质因数需要重复计算。如120=2*2*2*3*5,共有5个质因数。
输入
可能有多组测试数据,每组测试数据的输入是一个正整数N,(1<N<10^9)。
输出
对于每组数据,输出N的质因数的个数。
样例输入
120
200
样例输出
5
5
提示
注意1不是N的质因数;若N为质数,N是N的质因数。
AC代码:
#include<cstdio>
#include<cmath>
const int maxn = 100010;
struct factor{
int x,cnt;
}fac[10];
bool is_prime(int n)
{
if(n == 1) return false;
int sqr = (int) sqrt(1.0*n);
for(int i=2;i<=sqr;i++){
if(n%i==0) return false;
}
return true;
}
int prime[maxn],pNum=0;
void Find_Prime(){
for(int i=1;i<maxn;i++ ){
if(is_prime(i)==true){
prime[pNum++] = i;
}
}
}
int pFactor(int n){
int num=0,temp=n;
int sqr = (int) sqrt(1.0*n);
for(int i=0;i<pNum&&prime[i]<=sqr;i++){
if(n%prime[i]==0){
fac[num].x=prime[i];
fac[num].cnt=0;
while(n%prime[i]==0){
fac[num].cnt++;
n/=prime[i];
}//while
num++;
}//if
if(n == 1) break;
}//for
if(n != 1){
fac[num].x=n;
fac[num++].cnt=1;
}
int count=0;
for(int i=0;i<num;i++)
{
count+=fac[i].cnt;
}
return count;
}
int main()
{
Find_Prime();
int n;
while(scanf("%d",&n)!=EOF)
{
int num=pFactor(n);
printf("%d\n",num);
}
return 0;
}
/**************************************************************
Problem: 1947
User: 2015212040209
Language: C++
Result: 正确
Time:8 ms
Memory:1516 kb
****************************************************************/