如何O(1)判断一个数是不是x的幂

如何 O(1) 判断一个数是不是 x 的幂 (x 有限大)

数据在 32 位整数范围内

2 的幂

231. 2 的幂 - 力扣(LeetCode)

给你一个整数 n,请你判断该整数是否是 2 的幂次方。如果是,返回 true ;否则,返回 false 。

如果存在一个整数 x 使得 n == 2x ,则认为 n 是 2 的幂次方。

Sol1 位运算

n & n − 1 = 0 , 那么 n 是 2 的整次幂 n \; \& \; n - 1 = 0, 那么 \,n\, 是 \,2\, 的整次幂 n&n1=0,那么n2的整次幂

假设 n 的二进制为 ( a 10000 ) 2 (a10000)_2 (a10000)2 , 其中 a 表示若干高位 0, 1 表示最低位的 1。

那么 n-1 的二进制为 ( a 01111 ) 2 (a01111)_2 (a01111)2 , 两者做与运算,得到 ( a 0000 ) 2 (a0000)_2 (a0000)2

也就是说,n & n-1 可以去掉最低位的 1.

2 x 2^x 2x 的二进制表示只有一个 1,即 :

class Solution {
public:bool isPowerOfTwo(int n) {return n > 0 && (n & (n - 1)) == 0;}
};

Sol2 位运算

n & − n = n , 那么 n 是 2 的整次幂 n \; \& \; -n = n, 那么 \,n\, 是 \,2\, 的整次幂 n&n=n,那么n2的整次幂

假设 n 的二进制为 ( a 10000 ) 2 (a10000)_2 (a10000)2 , 其中 a 表示若干高位 0, 1 表示最低位的 1。

那么 -n 的二进制, 将 n 的二进制每一位取反再加 1,为 ( a ‾ 10000 ) 2 (\overline{a}10000)_2 (a10000)2 , 两者做与运算,得到 ( 01000 ) 2 (01000)_2 (01000)2

也就是说,n & -n 可以得到最低位的1

2 x 2^x 2x 的二进制表示只有一个 1,即 : n & -n = n

这也是树状数组里面常用的 l o w b i t lowbit lowbit 操作

Sol3 算数基本定理

因为在 32 位整数范围内,这个范围内最大的 2 x 2^x 2x 2 30 = 1073741824 2^{30}=1073741824 230=1073741824 ,只要 n 是它的约数就行了。

class Solution {
private:static constexpr int BIG = 1 << 30;public:bool isPowerOfTwo(int n) {return n > 0 && BIG % n == 0;}
};

3 的幂

326. 3 的幂 - 力扣(LeetCode)

Sol1 试除法

我们不断地将 n 除以 3,直到 n=1。如果此过程中 n 无法被 3 整除,就说明 n 不是 3 的幂。

class Solution {
public:bool isPowerOfThree(int n) {while (n && n % 3 == 0) {n /= 3;}return n == 1;}
};

Sol2 算数基本定理

还是找最大的 3 x 3^x 3x , 由算数基本定理,他的约数只有 2 y 2^y 2y , 其中 0 ≤ y ≤ x 0\leq y\leq x 0yx

class Solution {
public:bool isPowerOfThree(int n) {return n > 0 && 1162261467 % n == 0;}
};

4 的幂

342. 4的幂 - 力扣(LeetCode)

Sol1 二进制中一的位置

4 的幂一定是 2 的幂,先判定 n & − n = n n\;\&\; -n = n n&n=n ,保证 n 是 2 的幂,此时 n 的二进制表示中只有一个 1, 而且这个 1 一定出现在偶数位上。构造 λ \lambda λ , 使得其所有奇数位上都为 1,若 n & λ ≠ 0 n\;\&\; \lambda \neq 0 n&λ=0 , 那么说明 n 的二进制形式存在奇数位的 1 ,不合法 ;否则,合法。综上 :

class Solution {
public:bool isPowerOfFour(int n) {return n > 0 && ((n & -n) == n) && (n & 0xaaaaaaaa) == 0;}
}; 

Sol2 取模性质

a b m o d p = ( a m o d p ) ) b m o d p a^b \;mod \; p = (a\;mod\;p))^b \;mod\;p abmodp=(amodp))bmodp

那么 4 x m o d 3 = 1 x = 1 4^x\;mod\;3=1^x=1 4xmod3=1x=1

如果 n 是 2 的幂,而不是 4 的幂,那么 n = 2 × 4 x n=2\times 4^x n=2×4x , 即 n ≡ 2 ( m o d 3 ) n\equiv 2 \;(mod\; 3) n2(mod3)

class Solution {
public:bool isPowerOfFour(int n) {return n > 0 && (n & (n - 1)) == 0 && n % 3 == 1;}
};

任意数 x 的幂

运用处理 3 的幂中的 Sol1 试除法即可,实际复杂度是 l o g x ( n ) log_x(n) logx(n)

或者直接预处理出来数据范围内的所有符合条件的数也可以,是 l o g x ( I N T _ M A X ) log_x(INT\_MAX) logx(INT_MAX)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/7970.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

sql注入练习

1.什么是SQL注入 SQL注入是比较常见的网络攻击方式之一&#xff0c;它不是利用操作系统的BUG来实现攻击&#xff0c;而是针对程序员编写时的疏忽&#xff0c;通过SQL语句&#xff0c;实现无账号登录&#xff0c;甚至篡改数据库 2.sql注入原理 攻击者注入一段包含注释符的SQL语…

能将图片转为WebP格式的WebP Server Go

本文完成于 2023 年 11 月 之前老苏介绍过 webp2jpg-online&#xff0c;可以将 webp 格式的图片&#xff0c;转为 jpg 等&#xff0c;今天介绍的 WebP Server Go 是将 jpg 等转为 webp 格式 文章传送门&#xff1a;多功能图片转换器webp2jpg-online 什么是 WebP ? WebP 它是由…

Vue 路由

单应用程序 SPA - Single Page Application 所有功能在一个html页面上实现 单页面应用 多用于 系统类网站/内部网站/文档类网站/移动端站点 多页面应用 多用于 公司官网/电商类网站 路由 单页面应用按需更新页面&#xff0c;需要明确访问路径和组件的对应关系 Vue中的路…

重学java 30.API 1.String字符串

于是&#xff0c;虚度的光阴换来了模糊 —— 24.5.8 一、String基础知识以及创建 1.String介绍 1.概述 String类代表字符串 2.特点 a.Java程序中的所有字符串字面值(如“abc”)都作为此类的实例(对象)实现 凡是带双引号的&#xff0c;都是String的对象 String s "abc&q…

python面试之mysql引擎选择问题

MySQL数据库提供了多种存储引擎&#xff0c;每种存储引擎有其特定的优势和场景适用。以下是几种常见的MySQL存储引擎及其特点&#xff1a; InnoDB&#xff1a; 支持事务&#xff0c;有回滚和提交事务的功能。 支持行级锁定&#xff0c;提供更高的并发。 支持外键约束&#…

修改ElTable组件的样式(element-plus)

效果展示 <div class"table_main"><ElTable:data"tableList":header-cell-style"{color: #ffffff,background: #6f7f93,}"class"table_border":highlight-current-row"false"><ElTableColumn type"inde…

Java笔记(其五)--流程控制

switch switch(a) { case ***: break; ***** default: break; } 需要注意的点&#xff1a; 其中的 a 的类型&#xff0c;只支持byte、short、int、char&#xff0c;不支持double、float、long&#xff08;string也是支持的&#xff0c;这里说的是基础的数据类型&#x…

CentOS 自建gitlab仓库:安装相关工具

所需环境 Node 安装项目依赖、项目打包运行Nginx 前端项目部署&#xff08;正向代理、反向代理、负载均衡等&#xff09;Git 自动化部署时 拉取代码使用GitLab 代码仓库GitLab-Runner GitLab的CI/CD执行器 一、安装Node 检测是否已安装 常用node -v 命令检测。 如果已安装&a…

百面算法工程师目录 | 深度学习目标检测、语义分割、分类上百种面试问答技巧

本文给大家带来的百面算法工程师是深度学习面试目录大纲&#xff0c;文章内总结了常见的提问问题&#xff0c;旨在为广大学子模拟出更贴合实际的面试问答场景。在这篇文章中&#xff0c;可以点击题目直达问题答案处&#xff0c;方便查找问题寻找答案。节约大家的时间。通过对这…

Docker 快速安装指南 (CentOS 7)

Docker 快速安装指南 (CentOS 7) 1. 更新现有的软件包 sudo yum update -y2. 安装必要的依赖包 sudo yum install -y yum-utils device-mapper-persistent-data lvm2yum-utils: 提供 yum-config-manager 工具&#xff0c;方便添加软件仓库。device-mapper-persistent-data 和…

7-115 差分矩阵

知识点:差分 输入一个 n 行 m 列的整数矩阵,再输入 q 个操作,每个操作包含五个整数 x1,y1,x2,y2,c,其中 (x1,y1) 和 (x2,y2) 表示一个子矩阵的左上角坐标和右下角坐标。 每个操作都要将选中的子矩阵中的每个元素的值加上 c。 请你将进行完所有操作后的矩阵输出。 1≤n,…

ACGO欢乐赛#19题解

ACGO欢乐赛#19题解 T1、人工AI T2、判闰年 T3、一天中的某个时刻 T4、二进制下1的个数 T5、修正字符 T6、恰排骨 T7、买零食 T8、真-签到题

为什么你的企业需要微信小程序?制作微信小程序有什么好处?

什么是小程序&#xff1f; WeChat小程序作为更大的WeChat生态系统中的子应用程序。它们就像更小、更基本的应用程序&#xff0c;在更大的应用程序&#xff08;WeChat&#xff09;中运行。这些程序为用户提供了额外的高级功能&#xff0c;以便在使用WeChat服务时加以利用。根据…

sqlserver数据库查询注释/表结构的语句

sqlserver数据库和mysql查看的方式不一样&#xff0c;sqlserver需要通过语句来查&#xff0c;我们只需要替换掉语句里的表名就可以。 1查看表名&#xff0c;字段名&#xff0c;字段注释 SELECT A.name AS table_name, B.name AS column_name, C.value AS column_description F…

Docker 快速搭建 Kafka 集群

Docker 快速搭建 Kafka 集群 你是否想要一个 Kafka 集群&#xff0c;但又不想经历繁琐的手动配置过程&#xff1f;别担心&#xff0c;有了 Docker 和 Docker Compose&#xff0c;我们可以轻松快捷地搭建一个 Kafka 集群&#xff0c;让你能专注于享受实时数据流处理的乐趣。 环…

Mongodb操作与Java(三)增删改语句及DDL新增或删除字段

MongoDB概念 MongoDB 基本概念指的是学习 MongoDB 最先应该了解的词汇&#xff0c;比如 MongoDB 中的"数据库"、"集合"、"文档"这三个名词&#xff1a; 文档&#xff08;Document&#xff09;&#xff1a; 文档是 MongoDB 中最基本的数据单元&…

DeepSeek发布全新开源大模型,GPT-4级别能力 价格仅百分之一

最新国产开源MoE大模型&#xff0c;刚刚亮相就火了。 DeepSeek-V2性能达GPT-4级别&#xff0c;但开源、可免费商用、API价格仅为GPT-4-Turbo的百分之一。 因此一经发布&#xff0c;立马引发不小讨论。 从公布的性能指标来看&#xff0c;DeepSeek-V2的中文综合能力超越一众开源…

运维实施工程师之Linux服务器全套教程

一、Linux目录结构 1.1 基本介绍 Linux 的文件系统是采用级层式的树状目录结构&#xff0c;在此结构中的最上层是根目录“/”&#xff0c;然后在此目录下再创建其他的目录。 在 Linux 世界里&#xff0c;一切皆文件&#xff08;即使是一个硬件设备&#xff0c;也是使用文本来标…

校园论坛系统基于PHP的校园管理系统毕设校园好感度系统 校园文化建设系统APP小程序H5前后端源码交付支持二开,一次付款,终生使用

APP小程序H5前后端源码交付&#xff0c;支持二开&#xff0c;一次付款&#xff0c;终身使用&#xff0c;免费更新系统本身源码。 校园社交网络系统开发是一个复杂且综合性的项目&#xff0c;旨在为学生、教师和管理人员提供一个互动、分享和交流的平台。以下是一个关于校园社交…

Hive Bucketed Tables 分桶表

Hive Bucketed Tables 分桶表 1.分桶表概念 2.分桶规则 3.语法 4.分桶表的创建 5.分桶表的好处