题目描述
给定正整数 n,请问有多少个质数是 n 的约数。
输入格式
输入的第一行包含一个整数 n。
输出格式
输出一个整数,表示 n 的质数约数个数。
样例输入
396
样例输出
3
提示
396 有 2, 3, 11 三个质数约数。
对于 30% 的评测用例,1 ≤ n ≤ 10000。
对于 60% 的评测用例,1 ≤ n ≤ 109。
对于所有评测用例,1 ≤ n ≤ 1016。
#include<iostream>
#include<cmath>
using namespace std;
bool sort(long long n);
int main()
{
long long n;
int sum=0;
cin>>n;
if(n<=1) cout<<'0';
if(sort(n)){//先行判断是否质数
for(long long i=2;i<=sqrt(n)+1;i++){
if(n%i==0){
if(!sort(i)) sum++;
if(!sort(n/i)&&n/i!=i) sum++;
}
}
cout<<sum;
}
else cout<<'1';
return 0;
}
bool sort(long long n)
{
if(n==2) return false;
if(n%2==0) return true;//除去偶数的判断
for(long long j=3;j<=sqrt(n)+1;j+=2){
if(n%j==0) return true;
}//sqrt简化复杂度
return false;
}