В этом Сумма простых чисел Algo:Python - Сумма простых чисел
Пусть S (v, р) сумма чисел в диапазоне от 2 до V, которые остаются после просеивания со всех простых чисел меньше или равно чем p. То есть S (v, p) представляет собой сумму целых чисел до v, которые являются либо простыми, либо произведением простых чисел, больших p.
S (v, p) равно S (v, p-1), если p не является простым или v меньше, чем p2. В противном случае (p prime, p2≤v) S (v, p) может быть вычислено из S (v, p-1) на , находя сумму целых чисел, которые удаляются при просеивании с p. На этом этапе удаляется целое число , если оно является произведением p с другим целым числом , которое не имеет делителя меньше p. Это можно выразить как
S (v, p) = S (v, p-1) -p (S (⌊v/p⌋, p-1) -S (p-1, p-1))
def P10(n):
sqrt = int(n**0.5)
V = [n//i for i in range(1,sqrt+1)]
V += list(range(V[-1]-1,0,-1))
S = {i:i*(i+1)//2-1 for i in V}
for p in range(2,sqrt+1):
if S[p] > S[p-1]: # p is prime
sp= S[p-1] # sum of primes smaller than p
p2 = p*p
for v in V:
if v < p2: break
S[v] -= p*(S[v//p] - sp)
return S[n]
Я немного запутался в этой части:
if S[p] > S[p-1]: # p is prime
Означает ли это значение доступно в S
по индексу p
? Значения p варьируются от 2 до sqrt, а S - индексы от V. Не будет ли это причиной исключения индекса?
Спасибо. * Я новичок python