快速的判断一个数是不是2,3,4的幂

原创 2017年01月03日 17:32:53

1.判断是不是2的幂:
如果n是2的幂二进制中有一位是1,n-1的二进制表示中剩下的都是1
则判断用n&(n-1) 如果是0 就是2的幂

2.判断是不是4的幂:
如果n是4的幂,首先是2的幂:n&(n-1)=0
然后看是否在1的位置是不是在偶数位
n&(0x55555555) 为1 || n&(0xaaaaaaaa) 为0

3.判断是不是3的幂:
a.可以将每位加和判断是否可以被3整除
b.递归迭代除
c.此方法较为通用,分析3的幂的特点,假设一个数Num是3的幂,那么所有Num的约数都是3的幂,如果一个数n小于Num且是3的幂,那么这个数n一定是Num的约数。
了解上述性质,我们只需要找到一个最大的3的幂,看看参数n是不是此最大的幂的约数就行了

return n>0?!(1162261467 % n):0;  
 d.log函数

一个基本的事实就是如果n是3的x次方,那么以3为低对数后一定是一个整数,否则不是

class Solution {
public:
    bool isPowerOfThree(int n) {
        double res = log10(n) / log10(3);  //有精度问题,不要用以指数2.718为低的log函数
        return (res - int(res) == 0) ? true : false;
    }
};

Leetcode 326 Power of Three

版权声明:本文为博主原创文章,未经博主允许不得转载。

如何判断一个数是不是2的n次幂

题目:给定一个整数num,判断这个整数是否是2的N次方。比如,2,4,8是2的那次方,6,10不是2的N次方。 请看下面的程序: public static bool Check1(int...
  • jbfsdzpp
  • jbfsdzpp
  • 2015年10月20日 16:56
  • 1265

【LeetCode231算法/编程练习C++】--判断是否是2的整数次幂 //按位与&的用处

LeetCode第231条,按位与的作用 Given an integer, write a function to determine if it is a power of two. ...
  • zmdsjtu
  • zmdsjtu
  • 2016年12月19日 13:59
  • 748

巧用&符号,判断一个数的奇偶性,判断一个数(x)是否是2的n次方

判断一个数的奇偶性,是在C++ PRIMER习题集看见的,感觉有意思: 假设有一个整数x哈,假设 那么就有:if(x&1) cout...
  • cl_cjh
  • cl_cjh
  • 2016年12月24日 12:12
  • 835

如何快速判断一个数是不是2的幂、3的幂、4的幂

1、判断是不是2的幂 将2的幂写成二进制很容易看出,2的幂的二进制只有一个1,其余全是0,如下所示: 000010000...00 而将2的幂的二进制减1,其二进制变为:...
  • sangyongjia
  • sangyongjia
  • 2016年09月18日 10:43
  • 562

如何快速判断一个数是不是2的幂、3的幂、4的幂

1、判断是不是2的幂 将2的幂写成二进制很容易看出,2的幂的二进制只有一个1,其余全是0,如下所示: 000010000...00 而将2的幂的二进制减1,其二进制变为:...
  • u012530451
  • u012530451
  • 2017年12月20日 10:09
  • 34

快速幂+快速幂经典例题

快速幂取模算法所谓的快速幂,实际上是快速幂取模的缩写,简单的说,就是快速的求一个幂式的模(余)。在程序设计过程中,经常要去求一些大数对于某个数的余数,为了得到更快、计算范围更大的算法,产生了快速幂取模...
  • zhhe0101
  • zhhe0101
  • 2016年10月15日 10:59
  • 1198

算法学习 - 快速幂和矩阵快速幂(复杂度Olog(n))C++实现

快速幂 快速幂顾名思义,就是快速算某个数的多少次幂。其时间复杂度为 O(log₂N), 与朴素的O(N)相比效率有了极大的提高。 快速幂实现原理 快速幂的原理比较好懂,就是说假如我们...
  • chenfs1992
  • chenfs1992
  • 2014年12月24日 22:51
  • 7747

【每日算法】快速幂

数值的整数次方实现函数double Power(double base, int n) 求base的n次方,不得使用库函数,同时不需要考虑大数问题。Tips问题本身很直观,但是越简单的题越需要细心思...
  • jiange_zh
  • jiange_zh
  • 2016年02月18日 11:50
  • 3226

快速幂或者矩阵快速幂

快速幂或者矩阵快速幂在算指数时是很高效的,他的基本原理是二进制,下面的A可以是一个数也可以是一个矩阵(本文特指方阵),若是数就是快速幂算法,若是矩阵就是矩阵快速幂算法,用c++只需把矩阵设成一个类就可...
  • u011401504
  • u011401504
  • 2013年08月04日 22:17
  • 10108

POJ 1001 高精度实数相乘与快速幂

题目链接:http://poj.org/problem?id=1001 题意:
  • r131303
  • r131303
  • 2014年05月09日 20:56
  • 859
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:快速的判断一个数是不是2,3,4的幂
举报原因:
原因补充:

(最多只允许输入30个字)