质因数分解

题目描述

给定正整数 n,请问有多少个质数是 n 的约数。

输入格式

输入的第一行包含一个整数 n。

输出格式

输出一个整数,表示 n 的质数约数个数。

样例输入

396

样例输出

3

解题思路

对于求解质因数个数问题,第一种思路就是直接遍历从2到n,判断哪些数是质数并且能被n整除,然后就记录下来个数+1,这样的时间复杂度就是nlog2(n);在这里我们采用第二种思路,在这之前,我们需要知道一个知识点:任何大于1的正整数都可以表示为若干个质数的乘积,从而,我们可以直接用输入的n去循环除以它能除的尽的质数 i,直到不能除不尽了为止,再让 i自增,再循环除,直到n变成1为止。在这种方法中,我们要理解一点,就是任何数都可以表示为若干个质数乘积的话,那么比2,3···这些较小的质数大的整数也能被用比他们小的质数表示,等于再 i自增到一个非质数时,这时的n已经不能再除的尽这个非质数了,所以会自动跳过它,去除以下一个他除的尽的质数为止,直到它被除到1为止,表示他已经被分解尽了。

java解题代码

import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        Long n = input.nextLong();
        int counts = 0;
        for (long i = 2;i*i <= n;i ++){
            if (n % i == 0){
                counts += 1;
            }
                while (n > 1 && n % i == 0){
                    n /= i;
                }
        }
        if (n > 1) counts+=1;
        System.out.println(counts);
    }
}

python解题代码

n = int(input())
counts = 0
m = int(n**0.5)
for i in range(2,m+1):
    if n % i == 0:counts += 1
    while n > 1 and n % i == 0:n //=i
    if n == 1:break
if n > 1:counts += 1
print(counts)

由于python是编译型语言,在运行代码时会一行一行执行代码,因此对大数据的计算方法,python是略慢的。

你可能感兴趣的:(算法,数据结构)