判断N个数是否是完全数

简介: 判断N个数是否是完全数

🌵🌵🌵前言

题目

一个整数,除了本身以外的其他所有约数的和如果等于该数,那么我们就称这个整数为完全数。

例如,6 就是一个完全数,因为它的除了本身以外的其他约数的和为 1+2+3=6。

现在,给定你 N 个整数,请你依次判断这些数是否是完全数。

  • 输入格式
    第一行包含整数 N,表示共有 N 个测试用例。

    接下来 N 行,每行包含一个需要你进行判断的整数 X。

  • 输出格式

每个测试用例输出一个结果,每个结果占一行。

如果测试数据是完全数,则输出 X is perfect,其中 X 是测试数据。

如果测试数据不是完全数,则输出 X is not perfect,其中 X 是测试数据。
  • 数据范围
    1≤N≤100,
    1≤X≤10^8^

解析

c++1s中内,大概可以计算<1亿次,
若每次皆为1亿,计算100次,则循环100亿次,>1亿次,已超时,所以需要优化。

  • 1不是完全数
  • 假设数为x,a为其约数,则x/a也为其约数, 因为 a * (x/a) = x
    假设约数中较小的那方为a,则a最大为x^1/2^
  • 所以我们只需从2开始遍历其前x^1/2^(含x^1/2^)的数即可,记得先将sum+1,因为1也算入约数

因为x最大为10^8^,开根号后为10^4^,100个数需10^6^<10^8^,所以不会超时。

另一思路:100000000 内的完全数有且仅

  • 6
  • 28
  • 496
  • 8128
  • 335503366

直接比较即可

代码

#include <iostream>
#include <cmath>
using namespace std;

int main(){
    int n;cin>>n;
    for(int i=0;i<n;i++){
        int x;cin>>x;
        int sum=0;
        
        if(x==1) sum=0;
        else{
            sum+=1; //加上1
            for(int j=2;j*j<=x;j++){
                if(x%j==0) {
                    if(j!=x/j)  sum=sum+j+x/j;
                    else sum+=j;
                }
            }    
        }
        if(sum==x) cout<<x<<" is perfect"<<endl;
        else cout<<x<<" is not perfect"<<endl;
    }
    return 0;
}
目录
相关文章
|
C#
WPF之VLC流媒体播放
原文:WPF之VLC流媒体播放 最近在做关于在WPF使用VLC流媒体播放的问题,现在可以在WPF中实现VLC本地播放了,流播放解决了,在下面的代码中注释流媒体播放那两段代码,更多的在乎大家摸索了^^,以供大家相互学习,这里我就先把实现VLC本地播放的代码和过程写给需要的朋友参考。
2864 0
antd table合并行或者列(动态添加合并行、列)
在Ant Design的Table组件中实现行或列的合并,通过动态计算数据源中的`rowSpan`或`colSpan`属性来控制,支持对特定字段进行行或列合并,包括多选框列的合并处理。
1866 3
antd table合并行或者列(动态添加合并行、列)
|
安全 Linux 测试技术
最新版Kali虚拟机安装和汉化中文教程
本文是对渗透测试安全人员经常使用的测试系统的最新版进行的一次系统配置下载安装配置,同时包含汉化的教程,是对自己熟悉系统安装环境配置的一次总结
3662 0
如何使用pympler或objgraph生成内存快照?
如何使用pympler或objgraph生成内存快照?
407 0
|
Java Spring 容器
BeanFactory 和 ApplicationContext 有什么区别?
BeanFactory 和 ApplicationContext 有什么区别?
462 0
|
存储 Prometheus Cloud Native
Prometheus(一)之基础安装
Prometheus(一)之基础安装
303 0
|
搜索推荐 小程序 NoSQL
如何设计 API 返回码(错误码)?
如何设计 API 返回码(错误码)?
695 0
如何设计 API 返回码(错误码)?
|
机器学习/深度学习 人工智能 自然语言处理
赠V100算力卡 | 百度首次公开PaddlePaddle全景图,11项模块新发布
4 月 23 日,首届 WAVE SUMMIT 2019 深度学习开发者峰会在北京举办,现场超千位开发者与来自百度、英特尔、清华大学等的科学家,就框架与深度学习展开了详细的讨论。在 WAVE 上,百度从建模、训练到部署,首次对外公布了 PaddlePaddle 全景图。
1014 0
赠V100算力卡 | 百度首次公开PaddlePaddle全景图,11项模块新发布
支付宝技术风险负责人陈亮:把事情做到极致,技术的差异性才会体现出来 | 6月14号云栖夜读
今日的首篇文章,讲述了:“很多事情,说出来很多人都在做,但是只有真正做到极致,技术的差异性才会体现出来”,蚂蚁金服技术风险部研究员陈亮(花名:俊义)在接受 InfoQ 采访时如是说道。在此前的支付宝技术嘉年华,InfoQ 对支付宝数次技术架构升级的见证者及主导架构师陈亮进行了独家采访,首次系统了解稳定支撑“双十一”等多次实战背后的支付宝技术风险体系。
28451 0
|
存储 JavaScript 前端开发
Java对象序列化底层原理源码解析
Java序列化是指把Java对象保存为二进制字节码的过程,Java反序列化是指把二进制码重新转换成Java对象的过程。那么为什么需要序列化呢?
7997 0