Тип 25 № 69903 
Обработка целочисленной информации. Нахождение делителей
i
Напишите программу, которая перебирает целые числа, большие 600 000, в порядке возрастания и ищет среди них такие, среди делителей которых есть хотя бы одно число, оканчивающееся на 7, но не равное 7 и самому числу. Необходимо вывести первые 5 таких чисел, и наименьший делитель, оканчивающийся на 7, не равный 7 и самому числу.
Формат вывода: для каждого из 5 таких найденных чисел в отдельной строке сначала выводится само число, затем — наименьший делитель, оканчивающийся на 7, не равный 7 и самому числу. Строки выводятся в порядке возрастания найденных чисел.
Количество строк в таблице для ответа избыточно.
Решение. Будем последовательно рассматривать каждое целое число, большее 600 000. В каждом таком числе будем перебирать делители числа, проверяя, оканчивается ли делитель на 7 и равен ли он числу 7. Встречая первый делитель числа, удовлетворяющий условиям задачи, будем выводить на экран число и этот делитель, а также останавливать перебор делителей очередного числа, поскольку первый встреченный делитель, удовлетворяющий условию задачи, и будет минимальным.
Приведём решение на языке Pascal.
var
i, j, halfI: longint;
count: integer;
begin
count := 0;
i := 600001;
while (count < 5) do begin
halfI := i div 2;
for j := 2 to halfI do
if (i mod j = 0) and (j mod 10 = 7) and (j <> 7) then begin
writeln(i, ' ', j);
count := count + 1;
break;
end;
i := i + 1;
end;
end.
В результате работы программа должна вывести следующее:
600001 437
600002 47
600003 1227
600005 217
600012 16667
Приведём решение на языке Python.
count = 0
i = 600001
while count < 5:
halfI = i // 2
for j in range(2, halfI + 1):
if i % j == 0 and j % 10 == 7 and j != 7:
print(i, ' ', j)
count += 1
break
i += 1
Приведём решение Дашкина Семёна на языке Python.
c = 0
x = 600000
while c < 5:
x += 1
a = []
for d in range(17,x//2 + 1, 10):
if x % d == 0:
a.append(d)
if len(a) > 0:
c += 1
print(x, min(a))
Приведём решение Десяткина Александра на языке Python.
a = 600000
count = 0
while count < 5:
a+=1
for i in range(17,a//2+1,10):
if a%i==0:
print(a, i)
count+=1
break
Приведём решение Егора Чернецова на языке Python.
n, c = 600001, 0
while c < 5:
(d := next((i for i in range(17, n, 10) if n % i == 0), 0)) and (print(n, d) or (c := c + 1)); n += 1
Ответ: 600001&437&600002&47&600003&1227&600005&217&600012&16667
69903
600001 437 600002 47 600003 1227 600005 217 600012 16667