继续拓展素数判断问题,今天来找找亲和数。
问题:
亲和数:定义数对 (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的代码思路略有不同,主要是在求因数和的方法上,两种方法都可以,看看你能否看懂。
领取专属 10元无门槛券
私享最新 技术干货