首页 > 试题广场 >

完全数计算

[编程题]完全数计算
  • 热度指数:156395 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
\hspace{15pt}完全数,又称完美数或完备数,是一些特殊的自然数。它所有的真因子(即除了自身以外的约数)之和恰好等于它本身。

\hspace{15pt}现在,你需要计算 1n 之间完全数的个数。

输入描述:
\hspace{15pt}输入一个整数 n \left(1 \leqq n \leqq 5 \times 10^5\right)


输出描述:
\hspace{15pt}输出一个整数,代表区间内完全数的个数。
示例1

输入

1000

输出

3

说明

\hspace{15pt}第一个完全数是 6,因为 6 的约数有 1, 2, 3, 6,去除本身后,剩余约数之和为 1+2+3=6
\hspace{15pt}第二个完全数是 28,因为 28 的约数有 1, 2, 4, 7, 14, 28,去除本身后,剩余约数之和为 1+2+4+7+14=28
头像 中年美少女
发表于 2020-09-07 09:52:33
看了一些提交记录,里面是默认知道完全数为:6/28/496/8128。如果不知道具体的完全数是多少,如何在有限的时间和运存大小下找到完全数?仅仅只用了一些小学数学常识,参考了一个博客指路:https://blog.csdn.net/qq_41807327/article/details/102983 展开全文
头像 MushrooM000
发表于 2021-03-02 16:46:31
推导公式大数学家欧拉曾推算出完全数的获得公式:如果p是质数,且2^p-1也是质数,那么(2^p-1)X2^(p-1)便是一个完全数。例如p=2,是一个质数,2^p-1=3也是质数,(2^p-1)X2^(p-1)=3X2=6,是完全数。例如p=3,是一个质数,2^p-1=7也是质数,(2^p-1)X2 展开全文
头像 牛客797476880号
发表于 2021-09-20 03:37:31
while True: try: n=int(input()) L=[] for i in range(1,n): p=0 for y in range(1,i): 展开全文
头像 枫火蓮天
发表于 2021-04-05 16:29:15
import java.util.Scanner; public class Main{    public static void main(String[] args){    展开全文
头像 Mercurius_1874
发表于 2021-07-04 00:36:14
1. 定义一个真因子列表的方法 2. 用循环判断约数和是否等于本身 def factorlist(num):     if num==1:        &nb 展开全文
头像 saving~
发表于 2021-09-26 20:11:42
个人觉得拿数学题当算法来考,很无脑,特别卷 let num ; while(num=parseInt(readline())){ let count=0;//计数变量 //第一个完全数是6,若小于6则输出0 if(num < 6){ console.log(0); } 展开全文
头像 LeeJQ
发表于 2021-07-06 23:33:51
C++,可读性较高的思路。 #include <bits/stdc++.h> using namespace std; int main() { int n; //待输入的数 while(cin>>n){ int count=0; // 展开全文
头像 牛客155969019号
发表于 2021-10-17 01:34:16
""" 1.用完全数性质筛选备选数 (1)所有的完全数都是三角形数。例如:6=1+2+3;28=1+2+3+...+6+7; 496=1+2+3+...+30+31;8128=1+2+3…+126+127。 (2)完全数都是以6或28结尾。(科学家仍未发现由其他数字结尾的完全数。) 2.验证是否为完 展开全文
头像 姐姐的遮阳伞
发表于 2022-04-18 15:05:43
这种题,不可能真的从 1 到 n 这个范围内找 有多少个 完全数。因为题目给定的 n 的范围是 1<=n<=5∗1051<=n<=5*10^51<=n<=5∗105 ,所以就算是单纯遍历这么多个数,就已经相当的耗时了,更别说一个一个数的判断,它是不是 完全数,不现 展开全文
头像 我不爱吃西红柿了
发表于 2020-08-26 10:38:24
看着这么简单一道题那些答案里的花里胡哨还是贴了上来。。。 public class TotalNum { public static void main(String[] args) { Scanner sc = new Scanner(System.in); while (sc.hasNext() 展开全文

问题信息

难度:
633条回答 32397浏览

热门推荐

通过挑战的用户

查看代码
完全数计算