关闭

题目1207:质因数的个数

96人阅读 评论(0) 收藏 举报
题目1207:质因数的个数

时间限制:1 秒

内存限制:32 兆

特殊判题:

提交:7367

解决:2406

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

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

输出:

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

样例输入:
120
样例输出:
5
提示:

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

#include <iostream>
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<string>
using namespace std;
 
 
bool mark[100001];
int prime[100001];
int primeSize;
 
void init()//用素数筛选法筛选出2到100000内的所有素因数
{
    primeSize=0;
    for(int i=2; i<100000; i++)
    {
        if(mark[i]==true) continue;
        prime[primeSize++]=i;
        if(i>=1000) continue;
        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)//若测试完2到100000内所有素因数,n仍未被分解到1,则剩余的因数一定是n一个大于100000的素因数
        {
            ansPrime[ansSize]=n;//记录该大素因数
            ansNum[ansSize++]=1;//其幂指数只能为1
        }
        int ans=0;
        for(int i=0; i<ansSize; i++)
        {
            ans+=ansNum[i];//统计各个素因数的幂指数
        }
        printf("%d\n",ans);
    }
    return 0;
}
 
/**************************************************************
    Problem: 1207
    User: zhuoyuezai
    Language: C++
    Result: Accepted
    Time:10 ms
    Memory:2008 kb
****************************************************************/

 

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:42072次
    • 积分:962
    • 等级:
    • 排名:千里之外
    • 原创:136篇
    • 转载:6篇
    • 译文:0篇
    • 评论:1条
    最新评论