判断2的幂次方(多种算法)
来源:互联网 发布:ipad下载软件要钱 编辑:程序博客网 时间:2024/04/25 22:02
【题目描述】
很简单,判断数N是不是2的次方。
【输入格式】
第一行一个整数T表示数据的个数
接下来T行,每行一个正整数N
【输出格式】
对于每个N,若N为2的整数次方输出“y”,否则输出“n”
【样例输入】
2
4
5
【样例输出】
y
n
【数据范围】
对于30%的数据,1<=T<=100000
对于50%的数据,1<=T<=1000000
对于100%的数据,1<=T<=5000000,1<=N<=2^64
(为了计算的方便,规定1s做10000000次运算)
【分析】
对于30%的数据,很明显就是一次次的试除。
对于50%的数据,也不难构造算法:预处理出所有2^0~2^64的值,然后二分查找N是否在这64个数中,若在输出y反之输出n。此算法时间复杂度大概6000000左右。
对于100%的数据,上面的算法显然不够用了,此时只能用1重循环解决。
列出所有2的幂次方的二进制表示,可以发现一个规律:都是由1个1打头,后面跟着若干个0(实际上这个规律是可以证明的,为节省篇幅此处不作详细介绍),这也就是说若N是2的幂次方且其2进制表示共有K位(1个1和K-1个0),则N-1的2进制表示共有K-1个1。列一个竖式,我们不难想到使用位运算中的and运算(相同取1,不同取0)。
若N是2的幂次方,则N and (N-1)一定等于0(自己列竖式就可以发现),反正不等于0,于是代码就可以轻而易举的写出来。
#include<iostream>using namespace std;int main(){ long long n; int t; cin>>t; while (t--) { cin>>n; if (n & (n-1)) cout<<"N"<<endl; else cout<<"Y"<<endl; } return 0;}
3 0
- 判断2的幂次方(多种算法)
- 快速判断一个数是否是2的幂次方,若是,并判断出来是多少次方!
- 快速判断一个数是否是2的幂次方,若是,并判断出来是多少次方!
- 快速判断一个数是否是2的幂次方,若是,并判断出来是多少次方!
- 快速判断一个数是否是2的幂次方,若是,并判断出来是多少次方!
- 快速判断一个数是否是2的幂次方,若是,并判断出来是多少次方!
- 快速判断一个数是否是2的幂次方,若是,并判断出来是多少次方!
- 快速判断一个数是否是2的幂次方,并判断出来是多少次方
- 快速判断一个数是否是2的幂次方,若是,并判断出来是多少次方!
- 快速判断一个数是否是2的幂次方,若是,并判断出来是多少次方!
- 快速判断一个数是否是2的幂次方
- 如何判断一个数是否是2的幂次方
- 判断一个数是否为2的次方幂
- 高效判断一个数是否是2的幂次方
- 判断一个数是否是2的幂次方
- 快速判断一个数是否是2的幂次方
- 判断一个数是否为2的次方幂
- 如何判断一个数是否为2的幂次方
- 进程与线程
- react LinkedStateMixin 已经过时
- 深入理解Java的接口和抽象类
- 分布式服务框架 Zookeeper -- 管理分布式环境中的数据
- CSS单位
- 判断2的幂次方(多种算法)
- FPGA的SDRAM操作
- C程序设计基础
- 【其他】Git忽略规则及.gitignore规则不生效的解决办法
- MFC GetSystemMetrics()函数的用法
- LBP算法
- [转]关于JAVA的selenium安装使用
- SSH框架整合
- 【数据结构】-(二)