欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

【算法笔记5.5小节 - 质因子分解】问题 C: 质因数的个数

程序员文章站 2024-03-21 21:34:28
...

题目描述

求正整数N(N>1)的质因数的个数。

相同的质因数需要重复计算。如120=2*2*2*3*5,共有5个质因数。

输入

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

输出

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

样例输入

120
200

样例输出

5
5

提示

 

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


#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<math.h>
#include<iostream>
#include<algorithm>
int a[10001],k=0;//保存素数
bool flag[1000010]={false};//要开的足够大99999999
void Find_Prime()
{
    for(int i=2; i<=100010; i++)
    {
        if(flag[i]==false)
        {
            a[k++] = i;
            for(int j=i+i; j<=100010; j+=i)
            {
                flag[j]=true;
            }
        }
    }
}

struct factor{
    int x, cnt;//x为质因子,cnt为其个数
}fac[10];


int main()
{
    Find_Prime();
    int n;
    while(scanf("%d",&n)!=EOF)
    {
        int num=0,ans=0;
        int sqr = (int)sqrt(1.0*n);
        for(int i=0;i<k&&a[i]<n; i++)
        {
            if(n%a[i]==0)
            {
                fac[num].x = a[i];//记录因子
                fac[num].cnt=0;
                while(n%a[i]==0)
                {
                    fac[num].cnt++;
                    ans++;
                    n/=a[i];
                }
                num++;
            }
            if(n==1) break;
        }
        if(n!=1)//如果无法被根号n以内的质因子除尽
        {
            fac[num].x = n;//那么一定有一个大于根号n的质因子
            fac[num++].cnt = 1;
            ans++;
        }
        printf("%d\n",ans);
    }
}

 

 

 

 

 

 

 

 

相关标签: 算法笔记