以下功能的"大O"是什么?我的假设是它是O(log(n)),但我想仔细检查.该函数简单地确定其参数是否为2的幂.
def pow_of_2(x):
a = math.log(x, 2)
if a == math.floor(a):
return True
else:
return False
Run Code Online (Sandbox Code Playgroud) 给定一个数字n,逐位运算n & (n - 1)总是产生一个距离 1 位的数字n。以下是一些示例:
n = 4 => b'100' & b'011' = b'000'
n = 5 => b'101' & b'100' = b'100'
n = 6 => b'110' & b'101' = b'100'
Run Code Online (Sandbox Code Playgroud)
换句话说,n & (n - 1)总是从 中清除 1 位n。为什么是这样?有人可以提供证明吗?
请帮我编码.我想做一个像这样的程序.对不起坏英语.
给定输入:
N
where N is an integer.
Run Code Online (Sandbox Code Playgroud)
返回:
True if N = 2^x, where x is an integer.
Run Code Online (Sandbox Code Playgroud)
我试过这样做,但它不能像我想的那样工作.
using namespace std;
int main()
{
float a,b,c;
cin>>a;
c=log10(a)/log10(2.0);
b=pow(2,c);
if(b==a)
{
cout<<"TRUE"<<endl;}
else
cout<<"FALSE"<<endl;{
}
}
Run Code Online (Sandbox Code Playgroud)
请帮帮我.谢谢.