319. 灯泡开关 : 经典数论推论题

简介: 319. 灯泡开关 : 经典数论推论题

网络异常,图片无法展示
|


题目描述



这是 LeetCode 上的 319. 灯泡开关 ,难度为 中等


Tag : 「数学」


初始时有 n 个灯泡处于关闭状态。第一轮,你将会打开所有灯泡。接下来的第二轮,你将会每两个灯泡关闭一个。


第三轮,你每三个灯泡就切换一个灯泡的开关(即,打开变关闭,关闭变打开)。


i 轮,你每 i 个灯泡就切换一个灯泡的开关。直到第 n 轮,你只需要切换最后一个灯泡的开关。


找出并返回 n 轮后有多少个亮着的灯泡。


示例 1:


网络异常,图片无法展示
|


输入:n = 3
输出:1 
解释:
初始时, 灯泡状态 [关闭, 关闭, 关闭].
第一轮后, 灯泡状态 [开启, 开启, 开启].
第二轮后, 灯泡状态 [开启, 关闭, 开启].
第三轮后, 灯泡状态 [开启, 关闭, 关闭]. 
你应该返回 1,因为只有一个灯泡还亮着。
复制代码


示例 2:


输入:n = 0
输出:0
复制代码


示例 3:


输入:n = 1
输出:1
复制代码


提示:


  • 0 <= n <= 10^90<=n<=109


数学



这是一道经典的数论题。


整理一下题意:ii 轮改变所有编号为 ii 的倍数的灯泡的状态(其中灯泡编号从 11 开始)。


一个编号为 xx 的灯泡经过 nn 轮后处于打开状态的充要条件为「该灯泡被切换状态次数为奇数次」。


同时,一个灯泡切换状态的次数为其约数的个数(去重)。


于是问题转换为:[1,n][1,n] 内有多少个数,其约数的个数为奇数。这些约数个数为奇数的灯泡就是最后亮着的灯泡。


又根据「约数」的定义,我们知道如果某个数 kkxx 的约数,那么 \frac{x}{k}kx 亦为 xx 的约数,即「约数」总是成对出现,那么某个数的约数个数为奇数,意味着某个约数在分解过程中出现了 22 次,且必然重复出现在同一次拆解中,即 k = \frac{x}{k}k=kx,即有 xx 为完全平方数(反之亦然)。


问题最终转换为:[1,n][1,n] 中完全平方数的个数为多少。


根据数论推论,[1,n][1,n] 中完全平方数的个数为 \left \lfloor \sqrt{n} \right \rfloorn,即最后亮着的灯泡数量为 \left \lfloor \sqrt{n} \right \rfloorn


代码:


class Solution {
    public int bulbSwitch(int n) {
        return (int)Math.sqrt(n);
    }
}
复制代码


  • 时间复杂度:O(1)O(1)
  • 空间复杂度:O(1)O(1)


最后



这是我们「刷穿 LeetCode」系列文章的第 No.319 篇,系列开始于 2021/01/01,截止于起始日 LeetCode 上共有 1916 道题目,部分是有锁题,我们将先把所有不带锁的题目刷完。


在这个系列文章里面,除了讲解解题思路以外,还会尽可能给出最为简洁的代码。如果涉及通解还会相应的代码模板。


为了方便各位同学能够电脑上进行调试和提交代码,我建立了相关的仓库:github.com/SharingSour…


在仓库地址里,你可以看到系列文章的题解链接、系列文章的相应代码、LeetCode 原题链接和其他优选题解。

相关文章
|
Oracle 关系型数据库 MySQL
MySQL8.0下载原装安装(超详解)
MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一。本文将讲解如何安装MySQL
2323 0
|
Ubuntu
避坑指南之Samba4在Ubuntu20.04 编译安装指南
避坑指南之Samba4在Ubuntu20.04 编译安装指南
1089 0
避坑指南之Samba4在Ubuntu20.04 编译安装指南
|
Java
JDK1.8源码下载及获取、导入IDEA阅读、配置JDK源码
本文是博主学习JDK源码的记录,希望对大家有所帮助。
2470 0
JDK1.8源码下载及获取、导入IDEA阅读、配置JDK源码
|
Oracle Java 关系型数据库
Oracle jdk 的国内下载镜像
Oracle jdk 的国内下载镜像
52546 0
|
人工智能
Suno教程篇:音乐小白也能使用Suno AI零门槛创作音乐?从此只听AI写的歌!
本文是一篇Suno AI音乐创作工具的教程,指导音乐小白如何使用Suno AI零门槛创作音乐,包括准备工作、基础使用、歌曲风格的选择、歌词填入技巧,以及通过实例展示如何为不同场景生成背景音乐。
Suno教程篇:音乐小白也能使用Suno AI零门槛创作音乐?从此只听AI写的歌!
|
Shell Python
如何将PyCharm中的终端运行前面的PS如何修改成当前环境
这篇文章介绍了如何在PyCharm的终端中修改命令提示符(PS)以反映当前激活的环境,通过更改PyCharm设置中的Shell Path实现。
|
人工智能 Kubernetes 持续交付
Kubernetes环境下基于微服务架构的容器化AI应用部署与管理最佳实践
【8月更文第19天】随着AI技术的快速发展,越来越多的企业开始将AI应用部署到生产环境。然而,AI应用往往包含大量的组件和服务,这使得其部署和管理变得非常复杂。微服务架构和容器化技术(如Docker)结合Kubernetes集群管理,为解决这些问题提供了强大的工具。本文将介绍如何在Kubernetes环境中部署和管理基于微服务架构的容器化AI应用。
810 0
|
SQL 关系型数据库 MySQL
SQLAlchemy使用指南
**SQLAlchemy 指南**:Python SQL 工具包,提供数据库高级抽象。安装:`pip install sqlalchemy`,加上数据库驱动(如 MySQL: `pip install mysql-connector-python`)。基础使用包括:创建数据库连接、定义模型、创建表、添加/查询/更新/删除数据。高级功能涉及关系映射、原生 SQL 语句及 SQLAlchemy Core。推荐阅读官方文档以深入了解。
839 1
|
监控 网络协议 iOS开发
程序退到后台的时候,所有线程被挂起,系统回收所有的socket资源问题及解决方案
程序退到后台的时候,所有线程被挂起,系统回收所有的socket资源问题及解决方案
485 0
|
网络协议 jenkins Devops
自动化测试成熟度模型
我从事软件测试工作以来,第一次知道自动化是15年年底,听大佬说QTP可以录制脚本然后自动化回放,测试效率很高,当时心向往之。不过当时技术比较菜,而且对工作也比较迷茫,听过就忘记了。
自动化测试成熟度模型