Пусть M (N) — сумма двух наибольших различных натуральных делителей натурального
Найдите 5 наименьших натуральных чисел,
Ответ:
Будем последовательно рассматривать каждое целое число,
Приведём решение на языке 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

