Advertisement
boris-vlasenko

25

Oct 21st, 2020
3,271
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.24 KB | None | 0 0
  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.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement