Тип 25 № 41000 
Обработка целочисленной информации. Нахождение делителей
i
Пусть M (N) — сумма двух наибольших различных натуральных делителей натурального числа N, не считая самого числа и единицы. Если у числа N меньше двух таких делителей, то M (N) считается равным 0.
Найдите 5 наименьших натуральных чисел, превышающих 11 000 000, для которых 0 < M (N) < 10 000. В ответе запишите найденные значения M (N) в порядке возрастания соответствующих им чисел N.
Решение. Будем последовательно рассматривать каждое целое число, большее 11 000 000. В каждом таком числе будем находить наибольшие 2 натуральных делителя, складывая их. Если сумма первых двух наибольших натуральных делителей числа будет меньше 10 000, будем выводить эту сумму на экран.
Приведём решение на языке Pascal.
var
i, j, halfI, del: int64;
countDel, count: integer;
begin
count := 0;
i := 11000001;
while (count < 5) do begin
halfI := i div 2;
del := 0;
countDel := 0;
for j := halfI downto 2 do
if (i mod j = 0) then begin
countDel := countDel + 1;
del := del + j;
if del > 10000 then break
else if countDel = 2 then begin
writeln(del);
count := count + 1;
break;
end;
end;
i := i + 1;
end;
end.
В результате работы программа должна вывести следующее:
8672
8388
8532
7042
7364
Приведём решение на языке Python.
count = 0
i = 11000001
while count < 5:
halfI = i // 2
dell = 0
countDel = 0
for j in range(halfI, 1, -1):
if i % j == 0:
countDel += 1
dell += j
if dell > 10000:
break
elif countDel == 2:
print(dell)
count += 1
break
i += 1
Приведём решение Романа Архипушкина на языке Python.
n = 11000000
cnt = 0
while cnt < 5:
n += 1
m = -1
lst = []
for i in range(2, int(n**0.5)):
if n % i == 0:
lst.append(i)
if len(lst) == 2:
m = n / lst[0] + n / lst[1]
break
if len(lst) == 1:
m = lst[0] + n / lst[0]
if 0 < m < 10000:
print(int(m))
cnt += 1
Приведём решение Михаила Глинского на языке Python.
def f(x):
d = set()
for i in range(2,int(x**.5)+1):
if x%i==0:
d.add(i)
d.add(x//i)
d=sorted(d)
if len(d) > 1: return d[-1]+d[-2]
else: return 0
x=11_000_000
k=0
while k<5:
x+=1
if 0 < f(x) < 10000:
print(f(x))
k+=1
Ответ: 8672&8388&8532&7042&7364
41000
8672 8388 8532 7042 7364