190511 | 质因数的个数

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

输入描述:

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

输出描述:

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

示例1

输入
120

输出
5

思路: 我一开始一直想着怎么判断是否是质数,怎么一直整除同一个质数。各种循环,复杂度飙升。看了大佬的程序才知道,根本不需要判断质数,因为一个整数被完全分解以后,一定全部是由质数组成的因子的!

代码:

#include<iostream>
#include <math.h>
using namespace std;


int main()
{
    int m;
    int count=0;
    while(cin>>m){
        for(int i=2;i<sqrt(m);i++)
        {
                while(m%i==0)
                {
                    count++;
                    m=m/i;//% 和/ 不要搞混
                 }        
                 if(m<=1) break;//若最后一个数是1或者0 那么直接跳出结束
         }
        if(m>1) count++;//若最后一个数大于1,那么一定是一个质数,所以要+1
        cout<<count<<endl;
    }
    return 0;
}

知识点:

  • 还是顺便复习一下质数的判断:
bool isprime(int n){
    if(n<2){
        return false;
    }
    for(int j=2;j*j<n;j++)
    {
        if(n%j==0) {return false;}
    }
    return true;
}

  • 看到大佬的代码里面用的是long长整型,但是 int整型也通过了测试,那么到底什么时候需要用long呢?
    int和long[int]取值范围是一样的都是2的31次-1,但是在不同系统下占用的字节数不同,long long是2的63次-1。

Reference:
[1] 算法:如何判断一个数是否是质数
[2] int、long和long long的范围
[3] long和int的区别

猜你喜欢

转载自blog.csdn.net/qq_43145926/article/details/90084164
今日推荐