【Python】快速找出所有完数

目录

  • 1. 找完数


代码思路仅供参考,欢迎大家批评指正!


1. 找完数

所谓完数就是该数恰好等于除自身外的因子之和。例如:6=1+2+3,其中1、2、3为6的因子。本题要求编写程序,找出任意两正整数m和n之间的所有完数。

【Python】快速找出所有完数_第1张图片


思路1:从m到n依次判断是否为完数,同时寻找一个数x的真因子只需遍历到sqrt(x)即可

# By jurio.
import math

m, n = map(int, input().split())

factor = []
flag = 0
for i in range(m, n + 1):
    factor.append(1)
    for a in range(2, int(math.sqrt(i) + 1)):
        if i % a == 0:
            factor.append(a)
            if a * a != i:
                    factor.append(i // a)
    if sum(factor) == i:
        print(f'{i:d} = ', end="")
        factor.sort()
        print(" + ".join(f'{fi}' for fi in factor))
        flag = 1
    factor = []

if not flag:
    print("None")

【Python】快速找出所有完数_第2张图片


思路2:一个偶数是完美数,当且仅当它具有如下形式:2(n-1)(2n-1)其中2n-1是素数。此事实的充分性由欧几里得证明,而必要性则由欧拉所证明1。所以完数均为偶数,只需要判断m~n之间的偶数即可。

尽管没有发现奇完全数,但是当代数学家奥斯丁·欧尔证明,若有奇完全数,则其形式必然是12p+1或36p+9的形式,其中p是素数2

import math

m, n = map(int, input().split())

factor = []
flag = 0
for i in range(m, n + 1):
    factor.append(1)
    if i % 2 == 0:
        for a in range(2, int(math.sqrt(i) + 1)):
            if i % a == 0:
                factor.append(a)
                if a * a != i:
                        factor.append(i // a)
    if sum(factor) == i:
        print(f'{i:d} = ', end="")
        factor.sort()
        print(" + ".join(f'{fi}' for fi in factor))
        flag = 1
    factor = []

if not flag:
    print("None")

【Python】快速找出所有完数_第3张图片


思路3:偶完全数都以6或28结尾3,如6、28、496、8128······

import math

m, n = map(int, input().split())

factor = []
flag = 0
for i in range(m, n + 1):
    factor.append(1)
    if i % 10 == 6 or i % 100 == 28:
        for a in range(2, int(math.sqrt(i) + 1)):
            if i % a == 0:
                factor.append(a)
                if a * a != i:
                        factor.append(i // a)
    if sum(factor) == i:
        print(f'{i:d} = ', end="")
        factor.sort()
        print(" + ".join(f'{fi}' for fi in factor))
        flag = 1
    factor = []

if not flag:
    print("None")

【Python】快速找出所有完数_第4张图片


  1. https://zh.wikipedia.org/wiki/完全数 ↩︎

  2. https://zh.wikipedia.org/wiki/完全数 ↩︎

  3. H. Novarese. Note sur les nombres parfaits Texeira J. VIII (1886), 11–16. ↩︎

你可能感兴趣的:(Python_PTA,python,算法)