判断一个数是否是2的n次方:
bool fun(int n){
return n>0&&(n&(-n))=n;
}
判断一个数是否是3的n次方:
//方法1 如果这个数能被3整除,且最后是1,则一定是3的n次方
bool fun(int n){
while(n&&n%3==0){
n/=3;
}
return n==1;
}
//方法2 最大的3的幂是3^19=1162261467(int类型最大范围内幂是19)
//3的n次幂一定是这个数的约数
//如果是long long类型最大范围到3^39= 4052555153018976267
bool fun(int n){
return n>0&&1162261467%n==0;
}