质数因数的个数

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


解题思路

  1. 质因数的遍历范围是2到sqrt(n),这样时间复杂度大大降低;
  2. 因为是从小到大的顺序找的所以肯定都是质因数(无需再用函数判断),否则在之前就已经在while循环里被除掉了。小于它的所有数已经被除掉了,所以如果可以整除就一定是质数
  3. 当每找到一个质因数以后,立刻整除掉它,紧接着增加质因数个数。
  4. 如果遍历到了sqrt(n)时还是大于1,则肯定还剩最后一个质因数。比如计算120的质因数个数时,最后计算到n=5,2<sqrt(5)<3,而之前i=3(因为120=22235),所以i循环已结束,最后剩下的那个质因数就是5。

原文


#include<stdio.h>
int main(){
    int n;
    int count=0;
    scanf("%d",&n);
    for(int i=2;i<=sqrt(n);i++){
        while(n%i==0){
            count++;
            n/=i;
        }
    }
    if(n!=1) count++;//此时n必为大于sqrt(n)的质数
    printf("%d\n",count);
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容