用python寻找相亲数(包含完美数、相亲数链)
1、相亲数指的是满足以下要求的两个数字a和b:
a的约数和等于b,b的约数和等于a。
所以,先自定义一个函数,求出数字n的所有的约数:
def yueshu(n):
a=[]
for i in range(1,n):
if n%i==0:
a.append(i)
return a

2、计算约数的和:
def yueshuhe(n):
b=yueshu(n)
c=sum(b)
return c

3、这样,就可以寻找10000以内的相亲数:
for i in range(1,10000):
j=yueshuhe(i)
if i<j and i==yueshuhe(j):
print((i,j))

4、如果a的约数和等于a,就称a为完美数。
下面是寻找10000以内的完美数:
for i in range(1,10000):
if i==yueshuhe(i):
print(i)

5、如果a的约数和是b,b的约数和是c,c的约数和是a,且a、b、c互不相等,那么就称(a,b,c)是3阶相亲数链。
10000以内没有3阶相亲数链。
for i in range(1,10000):
j=yueshuhe(i)
k=yueshuhe(j)
if i<j and i==yueshuhe(k):
print((i,j,k))

6、20000以内的五阶相亲数链只有一组:
for i in range(0,20000):
x=[i,]
for j in range(5):
k=yueshuhe(i)
x.append(k)
i=k
if x[0]<x[1] and x[0]<x[2] and x[-1]==x[0]:
print(x)

7、2115324引出一个四阶相亲数链:
i=2115324
for j in range(10):
k=yueshuhe(i)
print(k)
i=k
