给你一个整数 n 。如果 n 恰好有三个正除数 ,返回 true ;否则,返回 false 。
如果存在整数 k ,满足 n = k * m ,那么整数 m 就是 n 的一个 除数 。
由题意可知,三除数只有三个正除数,分别是1,它本身和它的平方根,并且由于它由平方根,所以三除数一定是正整数,而且它的平方根的平方一定要等于它本身,这样的数才是正整数,因此我们能直接确定小于4的数和它的平方根的平方不等于它本身的数不是三除数,所以我们只需判断4以后的数是不是三除数,因为若一个数除余刚好为0,这时它至少有两个正除数,如8%4==0,此时2和4都是它的正除数,所以我们只需知道它从2到它的平方根的除余是否有为0的结果,有的话就不是,反之则是。
下面是代码,新手写的,略有不足。
bool isThree(int n){
int i, nums = sqrt(n);
if(n<4||pow(nums,2)!=n)
return false;
else
{
if (n >= 4)
{
for (i = 2; i < nums; i++)
{
if (n % i == 0)
return false;
}
}
}
return true;
}