给一 正整数 n (1 <= n <= 10^18). 判断这个数是否正好只有 3 个不同的因子, 如果正好有 3 个不同的因子就返回 true, 否则返回 false
样例
样例1
输入: n = 9
输出: true
解释:
9 恰好有3个因子: 1, 3, 9, 所以返回 true.
样例2
输入: n = 10
输出: false
解释:
10 有4个因子: 1, 2, 5, 10, 所以返回 false.
只有3个不同因子,1和数字本身就已经占了2个,如果存在第三个因子a,那么一定有n/a也是因子,所以a一定是质数,并且a* a=n,所以只需要看n是否只有一个因子,并且这个因子是质数即可
class Solution {
public:
/**
* @param n: the given number
* @return: return true if it has exactly three distinct factors, otherwise false
*/
bool isThreeDisctFactors(long long n) {
// write your code here
if(n==1) return false;
else
{
int tmp=sqrt(n);
if(pow(tmp,2)!=n) return false;
for (long long i = 2; i < sqrt(tmp); i++) {
if(n%i==0) return false;
}
return true;
}
}
};