题目1207:质因数的个数

来源:互联网 发布:产品研发部 数据公司 编辑:程序博客网 时间:2024/05/16 01:17
#include<stdio.h>
#include<math.h>
bool mark[100001];
int prime[100001];
int primesize;
void init()   // 预处理求2到100000的素数 
{
    primesize=0;
    for(int i=2;i<=100000;i++) mark[i]=false;
    for(int i=2;i<=100000;i++){
        if(mark[i]==true)  continue;
        prime[primesize++]=i;
        if(i>=1000) continue;      // 2到100000的素数 
        for(int j=i*i;j<=100000;j+=i){
            mark[j]=true;    
        }    
    } 
}
int main()
{
    init();
    int n;
    while(scanf("%d",&n)!=EOF){
        int ansPrime[30];  // 按顺序保存分解出的素因数
        int ansSize=0;     // 分解出素因数的个数
        int ansNum[30];    // 保存分解出的素因数对应的幂指数
        for(int i=0;i<primesize;i++){
            if(n%prime[i]==0){
                ansPrime[ansSize]=prime[i];
                ansNum[ansSize]=0;   // 初始化幂指数为0
                while(n%prime[i]==0){  // 求幂指数 
                    ansNum[ansSize]++;
                    n/=prime[i];    
                }    
                ansSize++;  // 素因数个数增加
                if(n==1) break;  // 若已被分解为1,则分解提前终止 
            }    
        } 
        if(n!=1) {
            ansPrime[ansSize]=n;
            ansNum[ansSize++]=1;    
        } 
        int ans=0;
        for(int i=0;i<ansSize;i++) ans+=ansNum[i];// 统计各个素因数的幂指数 
        printf("%d\n",ans);
    }
    return 0;    
}
0 0
原创粉丝点击