一个完美数是一个数字,它的适当除数之和等于该数字。例如,适当除数为28的总和将为1 + 2 + 4 + 7 + 14 = 28,这意味着28是一个理想数。
如果数字n的适当除数之和小于n,则称其为n;如果该数字之和超过n,则将其称为有数。
由于12是最小的丰富数,所以1 + 2 + 3 + 4 + 6 = 16,可以写成两个丰富的数之和的最小数是24。通过数学分析,可以看出所有大于28123的整数可以写为两个丰富数字的总和。但是,即使已知不能表示为两个丰富数之和的最大数小于该上限,也无法通过分析进一步减小该上限。
找到所有不能写为两个丰富数字之和的正整数之和。
为了计算非阿本。总结,我正在计算以下内容:
步骤1:1到28123(含)之间的所有整数之和
第2步:我正在计算大量总和,即24 + 30 ...(因为12是绝对数字,因此第一个绝对数字是24)小于或等于28124
step3:non-abn.sum = tot_sum-abn_sum
但是我得到的答案是错误的。请帮忙!提前致谢。
正确答案应为:4179871
在下面看到我的o / p:
abn=[] #to store abundant nos.
def factors(n):
s=1
if n==1:
return 1
if n%2==0:
step=1
else:
step=2
r=int(n**.5)
if(r**2==n):
r-=1
s+=r+1
# s-sum
f=2
#print("n= ",n)
while(f<=r):
if n%f==0:
s+=f+n//f
#print(f,n//f)
if(s>n):
abn.append(n) #if sum is going to be greater than n iam storing them in abn list
return n
f+=step
else:
return 0
for i in range(12,28124): #since 12 is the first abn. no the range starts from 12
factors(i)
print("List work Done") #making a list containing abnd. nos
def sum_abn_nos(t): #making a list containing sum of two abn nos.
l=[]
count=0
print("Len of inp: ",len(t))
for i in range(len(t)):
for j in range(i,len(t)):
if(t[i]+t[j] <=28123): #since i need only upto 28123
l.append(t[i]+t[j])
count+=1
else:
break
print("Len(o/p: t) = ",count)
return l
def main():
global abn
t=sum_abn_nos(abn)
t.sort()
print(abn[0:11])
l=len(abn)
print("sorting done")
print("len(abn) ",l)
print("Len(t)= ",len(t),"t[last]= ",t[len(t)-1])
i=s1=0
#print("len(l)= ",len(l))
while(l>0): #since only 6903 abn. nos. are in the range 12 to 28124
s1+=t[i] #i guess the problem is due to this loop only
i+=1
l-=1
#s1= sum(t) #if i use this line commenting the above while loop iam getting a negative answer
print("List work 2 Done")
print("t[0:10]= ",t[0:11]," t[last]= ",t[len(t)-1])
print("sum1 = ",s1) #s1 represents abn.sum
s2=0
s2=0
s2=28123*28124
s2=s2//2 # sum of n natural nos: formula: (n*(n+1))/2
print("Non - abn sum = ",s2-s1)
main()