Задания
Версия для печати и копирования в MS Word
Тип 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


Аналоги к заданию № 40741: 41000 Все