Пусть M — максимальный простой натуральный делитель целого числа, не считая самого числа. Если таких делителей у числа нет, то считаем значение M равным нулю.
Напишите программу, которая перебирает целые числа, большие 1 825 000, в порядке возрастания и ищет среди них такие, для которых M не больше 25 000 и оканчивается на 3. В ответе запишите первые пять найденных чисел в порядке возрастания.
Например, для числа 105 M = 7.
Ответ:
Приведем решение на языке Python.
def div(x):
d = set()
for i in range(2, int(x**0.5)+1):
if x%i==0:
d.add(i)
d.add(x//i)
return sorted(d)
def p(x):
for i in range(2, int(x**0.5)+1):
if x%i==0:
return 0
return x > 1
k = 0
for x in range(1_825_001, 1_850_000):
d = [i for i in div(x) if p(i)]
if len(d)>0:
m = max(d)
if m <= 25_000 and m%10==3:
if k == 5:
break
print(x); k += 1
В результате работы программа должна вывести следующее:
1825001
1825002
1825010
1825025
1825028
Ответ: 1825001 1825002 1825010 1825025 1825028.
Приведём решение Сергея Донец на PascalABC.NET:
uses School;
begin
Range(1825001, 2000000)
.Where(n -> begin var pd := PrimeDivisors(n);var M := 0;
if not ((pd.Count = 1) and (pd[0] = n)) then M := pd.Max;
result:= (M <= 25000) and (M mod 10 = 3) end).Take(5).PrintLines;
end.

