题目描述
给定正整数 n,请问有多少个质数是 n 的约数。
输入格式
输入的第一行包含一个整数 n。
输出格式
输出一个整数,表示 n 的质数约数个数。
样例输入
复制
396
样例输出
复制
3
提示
396 有 2, 3, 11 三个质数约数。
对于 30% 的评测用例,1 ≤ n ≤ 10000。
对于 60% 的评测用例,1 ≤ n ≤ 109。
对于所有评测用例,1 ≤ n ≤ 1016。
##质因数个数
n=int(input())
## 法一
## 朴素筛法
##def get_prime(n):
## st=[0]*(n+1)
## primes=[]
## cnt=0
## for i in range(2,n+1):
## ## 0表示是质数
## if st[i]==0:
## primes.append(i)
## cnt+=1
## ## i的倍数
## for j in range(2*i,n+1,i):
## st[j]=1
## return primes
##print(get_prime(n))
##primes=get_prime(n)
##count=0
##for i in primes:
## if n%i==0:
## count+=1
##print(count)
## 法二
## 偶质数只有2进行单独判断
ans=0
## 除了2之外的余下质数必为奇数
i=3
## 判断2是否为其因子
if n%2==0:
ans+=1
while n%2==0:
n=n//2
## 判断余下奇质数
while i**2<=n:
if n%i==0:
ans+=1
while n%i==0:
n=n//i
i+=2
if n>1:
ans+=1
print(ans)
## 不知道是否会超时(python组撇脚的就是卡时间)