非充裕的问题Problem_23​​

时间:2018-06-23 06:13:56

标签: python python-3.x

一个完美数是一个数字,它的适当除数之和等于该数字。例如,适当除数为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:

Click here to see my 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()

0 个答案:

没有答案