Пусть S — сумма всех простых натуральных делителей целого числа,не считая самого числа. Если таких делителей у числа нет, то считаем значение S равным нулю.
Напишите программу, которая перебирает целые числа, меньшие 1 325 000, в порядке убывания и ищет среди них такие, для которых значение S не равно нулю, не больше 30 000 и кратно 5. В ответе запишите первые пять найденных чисел в порядке убывания.
Например, для числа 10S = 2 + 5 = 7.
Ответ:
Приведём решение на языке Python.
def prime(n):
for i in range (2, int(n**0.5)+1):
if n%i==0: return False
return True
k = 1325000 - 1
count = 0
while count != 5:
delitel = []
for i in range(2, int(k**0.5)+1):
if k%i == 0:
if prime(i):
delitel.append(i)
if prime(k // i):
delitel.append(k//i)
if len(delitel) > 0:
s = sum(delitel)
if s <= 30000 and s%5 ==0:
print(k)
count += 1
k -= 1
В результате работы программа должна вывести следующее:
1324994
1324992
1324991
1324986
1324980
Ответ: 1324994 1324992 1324991 1324986 1324980.
Приведём решение Юрия Красильникова на языке Python.
def prostoe(n):
k = 2
while k**2 <= n:
if n%k == 0: return False
k += 1
return True
def S(n):
d = set()
k = 2
while k**2 <= n:
if n%k == 0:
d |= {k,n//k}
k += 1
p = [x for x in d if prostoe(x)]
return sum(p) if p else 0
k,n = 0,1325000
while k < 5:
n -= 1
Sn=S(n)
if (0 < Sn <= 30000) and Sn%5 == 0:
k += 1
print(n)

