计算前100个完美数字的最快程序是什么



我是编程新手,尤其是python。我以前试过一个程序,但它似乎太慢了,我的电脑无法计算它们。提醒一下,完美数是一个等于其除数之和的一半的数(例如,6或28(。这是我的程序

a = 1
b = 1
c = 0
d = 0
while d < 100:
while b <= a:
if a%b ==0:
c = c + b
b = b + 1
if (c - a) == a:
print(a)
d = d + 1
b = 1
c = 0

可能有一些错误,我刚刚开始编写代码。提前谢谢。

我会改变while b <= a:while b <= a/2:因为在数字的一半之后没有除数

您可以使用欧几里得证明

import math
num = int(input('Enter a Number: '))
sq_num = math.sqrt(num)
primes = []
p_nums = []
for n in range(2, int(sq_num)+1):
if n > 1:
for i in range(2, n):
if (n % i) == 0:
break
else:
primes.append(n)
for i in primes:
print(i)
x = math.pow(2, i-1)  * (math.pow(2, i)-1)
if x < num:
p_nums.append(int(x))
else:
break
print(p_nums)

我在这里做的是让所有素数都小于输入数的平方根,原因是2^(2p−1((2^ p−1(总是一个完美数,IFF p是素数*。你只需要将这个公式应用于几个素数,一旦(计算产生的(值超过了输入的数字,循环就会终止。例如,如果输入了100,那么在循环终止之前,只会检查三个素数。

最新更新