Форум » Обработка целых чисел » Задача 25 (4211) » Ответить

Задача 25 (4211)

Sbslv: Написал код, но он работает ооочень долго. Сам код работает правильно - проверял. Вопрос только в том, как его ускорить? PROSTO = [] for i in range(1, 912673, 2): k = 0 for j in range(2, int(i**0.5)+1): if i%j==0: k = 1 break if k == 0: PROSTO.append(i) s = 912673 kn = 0 while kn != 5: s -= 2 s1 = 0 for i in range (3 , s): if (s % i == 0) and ((i not in PROSTO) or (i%2==0)): s1 += i if s1>s: break if s1!=0 and s % s1 == 0: kn += 1 print (s , s1)

Ответов - 3

Поляков: Оформите, пожалуйста, программу (см. замечание в желтой рамке вверху).

patnikk: в паскале всё работает шустро, переходите на него [pre2] ### uses school; var (c,n) := (0,912673); while c < 5 do begin n -= 2; var s := n.Divisors[1:^1].where(x-> not x.isprime).Sum; if (s > 0)and(n mod s = 0)and(n.DivisorsCount > 1) then begin println(n,s); c += 1; end; end [/pre2]

cabanov.alexey: Зря вы решили собирать кучу простых чисел в массив [pre2] def divisors(x): return {i for d in range(2,int(x**0.5)+1) if x%d==0 for i in (d,x//d)} def prime(x): return all(x%i!=0 for i in range(2, int(x**0.5)+1)) for x in range(912671,1,-2): S = sum(i for i in divisors(x) if not prime(i)) if S>0 and x%S==0: print(x,S)[/pre2]




полная версия страницы