Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- '''
- 83) (Д.Ф. Муфаззалов, г. Уфа) Число называется полусовершенным, если сумма всех или некоторых
- его собственных делителей (то есть всех положительных делителей, отличных от самого числа)
- совпадает с самим этим числом. Определите количество полусовершенных чисел в диапазоне [2;
- 2000].
- '''
- # ~ def count_del(x):
- # ~ sm = 0
- # ~ k = 0
- # ~ for i in range(1,x):
- # ~ if x%i==0:
- # ~ sm += i
- # ~ if sm==x:
- # ~ k += 1
- # ~ return k
- # ~ res = 0
- # ~ for a in range(2,2000+1):
- # ~ res += count_del(a)
- # ~ print(res)
- import itertools
- def get_dels(a):
- dels = [1]
- for i in range(2,int(a**0.5)+1):
- if a % i == 0:
- if i < a**0.5: # a/i == i
- dels.append(i)
- dels.append(a//i)
- else:
- dels.append(i)
- return dels
- def check(a,dels):
- n = len(dels)
- for i in range(1,n+1):
- dd = itertools.combinations(dels,i)
- for d in dd:
- s = sum(d)
- if s == a:
- return True
- return False
- k = 0
- for a in range(2,2000+1):
- dels = get_dels(a)
- if check(a,dels):
- k += 1
- print(k)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement