题目:

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

给定一个 整数 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. day01-2-@RequestMapping和Rest

    @RequestMapping和Rest 1.@RequestMapping 1.1基本使用 @RequestMapping注解可以指定 控制器(处理器) 的某个方法的请求url 1.2@Reques ...

  2. javascript之call用法实例

    call方法: 调用一个对象的一个方法,以另一个对象替换当前对象. 直接上代码: js例子:在A类中调用B类数据 function ClassA(){     this.name = 'ClassA' ...

  3. Android 开发Day8

    /* AUTO-GENERATED FILE. DO NOT MODIFY. * * This class was automatically generated by the * gradle pl ...

  4. FreeRTOS教程6 互斥量

    1.准备材料 正点原子stm32f407探索者开发板V2.4 STM32CubeMX软件(Version 6.10.0) Keil µVision5 IDE(MDK-Arm) 野火DAP仿真器 XCO ...

  5. 补充--关于nginx服务器多个网站如何设置404的问题?

    补充--关于nginx服务器多个网站如何设置404的问题? 需求1 :设置多个网站404页面为一个 都需配置网站的nginx.conf,以上面的多网站为例,404发布目录下,每个的nginx.conf ...

  6. css实现多余文字隐藏,用省略号代替

    .txt{ overflow: hidden; //溢出内容隐藏 white-space: nowrap; //强制文本在一行内显示 text-overflow: ellipsis; //当对象内文本 ...

  7. 巧用dblink 实现多进程并行查询

    概述 对于分区表的大数据统计分析,由于数据量巨大,往往需要采用并行.但是数据库并行的效率相比分进程分表统计还是有比较大的差距.本文通过巧用dblink,实现分进程分分区统计数据. 例子 kingbas ...

  8. 【已解决】java.text.ParseException: Unparseable date

    今天在工作的时候遇到一个问题,我的一个字段queryDate保存不了,总是null值: java.text.ParseException: Unparseable date 报错的原因是日期格式转换错 ...

  9. Scala编译原理

    1 package com.atguigu.chapter01; 2 /** 3 * 4 */ 5 //main 方法名 6 //小括号表示参数列表 7 // 参数声明方式: java -> 类 ...

  10. .NetCore HttpClient Proxy 设置全局代理

    .NetCore HttpClient Proxy 设置全局代理 环境 .net6.0,使用的是 HttpClient 在Program.cs里面 service.AddHttpClient<H ...