质因数的个数

来源:互联网 发布:linux vi 批量删除 编辑:程序博客网 时间:2024/06/07 05:43

题目描述

求正整数N(N>1)的质因数的个数。
相同的质因数需要重复计算。如120=2*2*2*3*5,共有5个质因数。

输入

可能有多组测试数据,每组测试数据的输入是一个正整数N,(1<N<10^9)。

输出

对于每组数据,输出N的质因数的个数。

样例输入

120200

样例输出

55

提示

注意1不是N的质因数;若N为质数,N是N的质因数。

#include <cstdio>#include <cmath>const int maxn=10001;int prime[maxn],pnum=0;int vis[maxn]={0};struct factor{    int x,cnt;}fac[10];void find_prime(){    int m=round(sqrt(maxn-1));    for(int i=2;i<=m;i++) if(!vis[i])        for(int j=i*i;j<maxn;j+=i) vis[j]=1;    for(int i=2;i<maxn;i++) if(!vis[i]) prime[pnum++]=i;}int main(){    find_prime();    int n;    while(scanf("%d",&n)==1){        int m=round(sqrt(n));        int num=0;        for(int i=0;i<pnum&&prime[i]<=m;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];                }                num++;            }            if(n==1) break;        }        if(n!=1){            fac[num].x=n;            fac[num++].cnt=1;        }        int ans=0;        for(int i=0;i<num;i++) ans+=fac[i].cnt;        printf("%d\n",ans);    }    return 0;}