Пусть M — сумма минимального и максимального простых делителей целого числа, не считая самого числа. Если у числа нет простых делителей, то M = 0.
Напишите программу, которая перебирает целые числа большие 7 000 000, в порядке возрастания и ищет среди них первые пять таких чисел, для которых M заканчивается на 13.
Количество строк в таблице для ответа избыточно.
Ответ:
Приведём решение на языке Python.
def prime(n):
for i in range (2, int(n**0.5)+1):
if n%i==0: return False
return True
def divs(n):
count = 0
div = []
for i in range(2, n//2 + 1):
if n%i == 0 and prime(i):
div.append(i)
count += 1
return count, div
k = 7000000
counter = 0
while True:
c, d = divs(k)
if c >= 2:
s = d[0] + d[-1]
if s%100 == 13:
print(k)
counter += 1
if counter == 5: break
k += 1
В результате работы программа должна вывести следующее:
7000018
7000076
7000088
7000096
7000124
Приведём решение Юрия Красильникова на языке Python.
def prostoe(n):
k = 2
while k**2 <= n:
if n%k == 0: return False
k += 1
return True
def M(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 min(p) + max(p) if p else 0
k,n = 0,7000000
while k < 5:
n += 1
if M(n)%100 == 13:
k += 1
print(n)

