题目:

对于一个 正整数,如果它和除了它自身以外的所有 正因子 之和相等,我们称它为 「完美数」。

给定一个 整数 n, 如果是完美数,返回 true;否则返回 false。

示例 1:

输入:num = 28
输出:true
解释:28 = 1 + 2 + 4 + 7 + 14
1, 2, 4, 7和 14 是 28 的所有正因子。
示例 2:

输入:num = 7
输出:false

提示:

  • 1 <= num <= 108

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/perfect-number
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

解题思路:

根据完美数的定义,需要排除自身,那么1一定不是一个完美数,且完美数的正因子一定是成对出现的,故可以只枚举出每对中较小的一个即枚举范围为[1,sqrt(num)]。

例如:num=36

36除自身以外的正因子为1,2,3,4,6,9,12,18,除1和6以外都是成对出现的[2,18],[3,12],[4,9],故只需要遍历到6就可以,且6只能计算一次。

或者让遍历的起始数 i 从2开始(1不是完美数),上限条件为 i <= num / i

代码:

 1 class Solution {
2 public boolean checkPerfectNumber(int num) {
3 if(num == 1) return false;
4 //定义和的初始值为1
5 int sum = 1;
6 for(int i = 2; i <= num / i; i++){
7 if(num % i == 0){
8 //能被整除,加上小的因子
9 sum += i;
10 //当前数不能被完全平方则加上大的因子
11 //否则能被完全平方只能加一个
12 if( i*i != num){
13 sum += num / i;
14 }
15 }
16 }
17 return sum == num;
18 }
19 }

力扣507(java)-完美数(简单)的更多相关文章

  1. 力扣 ——4Sum (四数之和)python 实现

    题目描述: 中文: 给定一个包含 n 个整数的数组 nums 和一个目标值 target,判断 nums 中是否存在四个元素 a,b,c 和 d ,使得 a + b + c + d 的值与 targe ...

  2. 【力扣】454. 四数相加 II

    给定四个包含整数的数组列表 A , B , C , D ,计算有多少个元组 (i, j, k, l) ,使得 A[i] + B[j] + C[k] + D[l] = 0. 为了使问题简单化,所有的 A ...

  3. 力扣Leetcode 202. 快乐数 -快慢指针 快乐就完事了

    快乐数 编写一个算法来判断一个数 n 是不是快乐数. 「快乐数」定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和,然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不 ...

  4. 力扣485. 最大连续1的个数-C语言实现-简单题

    题目 [题目传送门] 给定一个二进制数组, 计算其中最大连续1的个数. 示例 1: 输入: [1,1,0,1,1,1] 输出: 3 解释: 开头的两位和最后的三位都是连续1,所以最大连续1的个数是 3 ...

  5. Java实现 LeetCode 507 完美数

    507. 完美数 对于一个 正整数,如果它和除了它自身以外的所有正因子之和相等,我们称它为"完美数". 给定一个 整数 n, 如果他是完美数,返回 True,否则返回 False ...

  6. 力扣算法经典第一题——两数之和(Java两种方式实现)

    一.题目 难度:简单 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数, 并返回它们的数组下标. 你可以假设每种输入只会对应一 ...

  7. 力扣566. 重塑矩阵-C语言实现-简单题

    题目 传送门 在MATLAB中,有一个非常有用的函数 reshape,它可以将一个矩阵重塑为另一个大小不同的新矩阵,但保留其原始数据. 给出一个由二维数组表示的矩阵,以及两个正整数r和c,分别表示想要 ...

  8. 力扣561. 数组拆分 I-C语言实现-简单题

    题目 传送门 给定长度为 2n 的整数数组 nums ,你的任务是将这些数分成 n 对, 例如 (a1, b1), (a2, b2), ..., (an, bn) ,使得从 1 到 n 的 min(a ...

  9. 力扣832. 翻转图像-C语言实现-简单题

    题目 传送门 文本 给定一个二进制矩阵 A,我们想先水平翻转图像,然后反转图像并返回结果. 水平翻转图片就是将图片的每一行都进行翻转,即逆序.例如,水平翻转 [1, 1, 0] 的结果是 [0, 1, ...

  10. 刷题-力扣-1137. 第 N 个泰波那契数

    1137. 第 N 个泰波那契数 题目链接 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/n-th-tribonacci-number 著作权 ...

随机推荐

  1. manjaro安装微信deepin-wine-wechat后启动不了

    直接将主目录下载的 .deepinwine 删除! 随后,点击图标,重新安装!

  2. ETL工具-KETTLE教程实例实战3----转换(输入、输出)

    ETL工具-KETTLE教程实例实战3----转换(输入.输出) 欢迎关注笔者的公众号: java大师, 每日推送java.kettle运维等领域干货文章,关注即免费无套路附送 100G 海量学习.面 ...

  3. TornadoFx中的css美化

    原文地址:TornadoFx中的css美化 - Stars-One的杂货小窝 TornadoFx中使用类重新对css进行了封装,所以可以用代码的形式来书写样式 说明 除了Text,其他的若是要修改文字 ...

  4. C#事件(event)的理解

    一.多播委托的应用--观察者模式 遇到一个开发的问题? 面试者:以面向对象的思想实现一下的场景: 猫:Miao一声,紧接着引发了一系列的行为~ Miao:引发了一系列的动作: 从代码层面来说:代码这样 ...

  5. 快速搭建Web安全测试环境

    快速搭建Web安全测试环境 1.虚拟机安装 2.网站搭建 一.虚拟机安装 下载VMware虚拟机,Windows 虚拟机 | Workstation Pro | VMware | CN 安装VMwar ...

  6. Lambda Web Browser使用教程

    Lambda web browser是一个功能强大的UE内置浏览器插件, 允许用户在编辑器模式和运行时启动一个浏览器窗口, 对于一些采用传统BS架构的项目而言, 控制页面都放在前段, 若想要将控制页面 ...

  7. ArrayList扩容代码分析

    ArrayList扩容机制是在面试中频繁出现的问题,平时了解的比较含糊,特此记录! 注意:每次发生扩容,其容量扩充为原来的1.5倍左右 add方法 public boolean add(E e) { ...

  8. Unicode编码解码的全面介绍

    1. Unicode的起源和发展 Unicode是一个国际标准,旨在统一世界上所有文字的表示方式.它最初由Unicode协会创立,解决了不同字符集之间的兼容性问题.Unicode的发展经历了多个版本, ...

  9. Spark技术生态

    Spark的技术生态 Spark的技术生态包含了各种丰富的组件,而不同的组件提供了不同功能,以适应不同场景. Spark core spark core包含Spark的基本功能,定义了RDD的API以 ...

  10. #轮廓线dp,博弈论#洛谷 4363 [九省联考 2018] 一双木棋 chess

    题目传送门 分析 菲菲想让答案尽量大,牛牛想让答案尽量小. 很天真的一种想法就是设 \(dp[i][j]\) 表示现在选择 \((i,j)\) 的答案. 但是这样有一个弊端就是并不知道其它位置怎么选择 ...