Пусть R — сумма максимального и минимального простых делителей целого числа, не считая единицы и самого числа. Если у числа нет простых делителей, то считаем значение R равным нулю. Напишите программу, которая перебирает целые числа, большие 6 000 000, в порядке возрастания и ищет среди них первые шесть таких чисел, для которых R заканчивается на 19.
Количество строк в таблице для ответа избыточно.
Ответ:
Приведём решение Юрия Красильникова на языке Python.
def prostoe(n):
k = 2
while k**2 <= n:
if n%k == 0: return False
k += 1
return True
def r(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 0 if len(p) == 0 else min(p) + max(p)
k = 0
n = 6000001
while k < 6:
if r(n)%100 == 19:
print(n)
k += 1
n += 1
В результате работы программа должна вывести следующее:
6000002
6000034
6000176
6000190
6000272
6000276
Приведём решение Бориса Савельева на языке Python.
def F(n):
k=1
for j in range (2,int(n**0.5)+1):
if n%j==0:
k=0
break
return k
cnt=1
for n in range (6000000+1,10**15):
a=[]
k=int(n**0.5)+1
for j in range (2,k):
if n%j==0:
if F(j)==1:
a.append(j)
if n//j!=j and F(n//j):
a.append(n//j)
if len(a)>=2:
if (min(a)+max(a)%100)==19:
print(n)
cnt+=1
if cnt>6:
break
Приведём решение Сергея Донец на языке PascalABC.NET.
uses School;
begin
Range(6_000_001, 8_000_000)
.Where(n-> begin
if IsPrime(n) then Result := false
else begin
var pd := PrimeDivisors(n);
var M := pd.Min + pd.Max;
Result := M mod 100 = 19;
end;end).Take(6).PrintLines;
end.

