一知半解讲python第二季:6.亲和数

继续拓展素数判断问题,今天来找找亲和数。

问题:

亲和数:定义数对 (x,y) 为亲和数对当且仅仅当x、y为不同正整数,且x、y各自的所有非自身正因子之和等于另一个数。

给定一个数据范围a

分析:

这题和完数题有些相似,都是要求非自身的所有因子之和,只是这里要判断这个和是否与另外一个数想等,而且要互等。

又因为要在[a,b]范围内寻找全部亲和数,所以需要双重循环。

设x的不包含自身的因子和为sumx,那么sumx就应该是待判断的y。因为只有y等于sumx,(x,y)才可能是亲和数。这时只要sumx的因子和sumy=x就可以断定(x,y)是亲和数了。但是因为(x,y)与(y,x)属于同一亲和数,所以还需加上一个条件x

代码py:

#coding:cp936

total=0

a=eval(input("请输入范围起始值:"))

b=eval(input("请输入范围终止值:"))

for x in range(a,b+1):

sumx=0#sumx与sumy每次需要赋值0,很关键

sumy=0

i=1

while(i*i

if(x%i==0):

sumx=sumx+i+x/i;

i=i+1

sumx=sumx-x#因为i=1时加上了其对应因子x,而因子和不应该包含x,所以需要减去

i=1

while(i*i

if(sumx%i==0):

sumy=sumy+i+sumx/i;

i=i+1

sumy=sumy-sumx

if(sumy==x and x

total=total+1

print("发现亲和数(",x,sumx,")")

print("共有",total,"对亲和数")

代码c++

与python的代码思路略有不同,主要是在求因数和的方法上,两种方法都可以,看看你能否看懂。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181112G151KE00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券