李现实 发表于 2020-4-9 20:21:11

新手上路

这个用Python怎么做能教一下吗

BngThea 发表于 2020-4-9 20:24:06

逻辑:
首先 定义一个函数,用来计算一个数的因子和
然后x遍历6-10000,y遍历x+1-10000
通过上面的函数判断是否满足亲密数条件,输出

疾风怪盗 发表于 2020-4-9 22:17:57

这样写对不对?
#计算因子的函数
def sum_yinzi(num):
    sum_yinzijisuan = 0
    for i in range(1,num+1):
      if num % i == 0 :
            sum_yinzijisuan += i
    return sum_yinzijisuan

#验证
#print(sum_yinzi(220))
#print(sum_yinzi(284))
#print(sum_yinzi(503))

#循环计算,加入列表
a = []
b = []
for n in range(6,1001):
    resualt = sum_yinzi(n)
    a.append(n)
    b.append(resualt)

#判断因子对
for m in range(0,len(a)):
    for n in range(m,len(a)):
      if (b ==b) and (a != a):
            print(a, a)

bigbird0419 发表于 2020-4-9 22:46:50

楼上的计算因子函数,会导致(6,11)被误判,主要题目也有问题,亲密数对的准确要求是:小于自身的因子和,即6的因子和是1,2,3,不含6;11的因子和是1。
def SumOfFactor(num):
    sum = 0
    for i in range(1,(num//2)+1,1):
      if num%i==0:
            sum += i
    return sum


for a in range(6,10001,1):
    b = SumOfFactor(a)
    if SumOfFactor(b) == a:
      if a<b:
            print('(' ,a,',',b,')')

bigbird0419 发表于 2020-4-9 22:57:24

for a in range(6,10001,1):
    b = SumOfFactor(a)
    if b>a:    #避免成对出现(220,284)和(284,220)
      if SumOfFactor(b) == a:
            print('(' ,a,',',b,')')
这个运行效率高一点

疾风怪盗 发表于 2020-4-10 00:22:47

bigbird0419 发表于 2020-4-9 22:46
楼上的计算因子函数,会导致(6,11)被误判,主要题目也有问题,亲密数对的准确要求是:小于自身的因子和, ...

嗯,我没理解对题目。。。。。。。。哎。。。
页: [1]
查看完整版本: 新手上路