质因数的个数

质因数的个数

题目描述

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

输入描述:

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

输出描述:

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

示例1

输入

[复制](javascript:void(0)😉

120

输出

[复制](javascript:void(0)😉

5

本题思路很明确,就是从2开始不断的看余数是不是0,如果是的话就在结果中加一,再算除法的结果(依然是从2开始算)。这里有一个性能优化的点在于i增长的时候只算到被除数的根号下即可,因为a*b=c,那a和b中至少有一个是小于等于c的根号的。但是这样会有漏算的情况,就是1和被除数本身的情况,所以需要我们最后额外检验一下,如果被除数在出循环是依然大于1,就在结果上加1。另外,如果被除数本身就是质数,那出来的结果就是0,而我们应该输出的是2

import java.util.Scanner;

/**
 * @program: OJ
 * @description:
 * @author: JiaDing
 * @create: 2020-03-24 22:12
 **/
public class Main {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        while(sc.hasNext()){
            long now=sc.nextLong();
            int ans=0;
            int i=2;
            while(i<=Math.sqrt(now)){
                if(now%i==0){
                    ans++;
                    now=(now/i);
                    i=2;
                }else{
                    i++;
                }
            }
            if(ans<=1){
                System.out.println(2);
            }else{
                if(now>1){
                    ans++;
                }
                System.out.println(ans);
            }
        }
    }
}
posted @ 2020-03-25 00:05  别再闹了  阅读(390)  评论(0)    收藏  举报