boris-vlasenko

25

Oct 21st, 2020
557
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. '''
  2. 83) (Д.Ф. Муфаззалов, г. Уфа) Число называется полусовершенным, если сумма всех или некоторых
  3. его собственных делителей (то есть всех положительных делителей, отличных от самого числа)
  4. совпадает с самим этим числом. Определите количество полусовершенных чисел в диапазоне [2;
  5. 2000].
  6. '''
  7. # ~ def count_del(x):
  8.     # ~ sm = 0
  9.     # ~ k = 0
  10.     # ~ for i in range(1,x):
  11.         # ~ if x%i==0:
  12.             # ~ sm += i
  13.             # ~ if sm==x:
  14.                 # ~ k += 1
  15.     # ~ return k
  16. # ~ res = 0
  17. # ~ for a in range(2,2000+1):
  18.     # ~ res += count_del(a)
  19. # ~ print(res)
  20.  
  21.  
  22.  
  23. import itertools
  24.  
  25. def get_dels(a):
  26.     dels = [1]
  27.     for i in range(2,int(a**0.5)+1):
  28.         if a % i == 0:
  29.             if i < a**0.5: # a/i == i
  30.                 dels.append(i)
  31.                 dels.append(a//i)
  32.             else:
  33.                 dels.append(i)
  34.     return dels
  35.    
  36. def check(a,dels):
  37.     n = len(dels)
  38.     for i in range(1,n+1):
  39.         dd = itertools.combinations(dels,i)
  40.         for d in dd:
  41.             s = sum(d)
  42.             if s == a:
  43.                 return True
  44.     return False
  45.  
  46. k = 0
  47. for a in range(2,2000+1):
  48.     dels = get_dels(a)
  49.     if check(a,dels):
  50.         k += 1
  51. print(k)
  52.  
  53.  
  54.  
RAW Paste Data