Задания
Версия для печати и копирования в MS Word

Пусть M (N)  — про­из­ве­де­ние 5 наи­мень­ших раз­лич­ных на­ту­раль­ных де­ли­те­лей на­ту­раль­но­го числа N, не счи­тая еди­ни­цы. Если у числа N мень­ше 5 таких де­ли­те­лей, то M (N) счи­та­ет­ся рав­ным нулю.

Най­ди­те 5 наи­мень­ших на­ту­раль­ных чисел, пре­вы­ша­ю­щих 200 000 000, для ко­то­рых 0 < M (N) < N. В от­ве­те за­пи­ши­те най­ден­ные зна­че­ния M (N) в по­ряд­ке воз­рас­та­ния со­от­вет­ству­ю­щих им чисел N.

Ответ:

Спрятать решение

Ре­ше­ние.

Будем по­сле­до­ва­тель­но рас­смат­ри­вать каж­дое целое число, боль­шее 200 000 000. В каж­дом таком числе будем на­хо­дить пер­вые 5 на­ту­раль­ных де­ли­те­лей, умно­жая их между собой, если ре­зуль­тат про­из­ве­де­ния не будет пре­вы­шать зна­че­ния са­мо­го числа. Если ре­зуль­тат про­из­ве­де­ния пер­вых 5 на­ту­раль­ных де­ли­те­лей числа, не счи­тая еди­ни­цы, будет мень­ше са­мо­го числа, будем вы­во­дить ре­зуль­тат про­из­ве­де­ния на экран.

 

При­ведём ре­ше­ние на языке Pascal.

var

i, j, halfI, del: int64;

countDel, count: integer;

begin

count := 0;

i := 200000001;

while (count < 5) do begin

halfI := i div 2;

del := 1;

countDel := 0;

for j := 2 to halfI do

if (i mod j = 0) then begin

countDel := countDel + 1;

del := del * j;

if del > i then break

else if countDel = 5 then begin

writeln(del);

count := count + 1;

break;

end;

end;

i := i + 1;

end;

end.

 

В ре­зуль­та­те ра­бо­ты про­грам­ма долж­на вы­ве­сти сле­ду­ю­щее:

1728

21632

1260

1152

4127787

 

При­ведём ре­ше­ние Влада Са­фо­но­ва на языке Python.

zn=[]

for x in range(200000001,200000100):

de=set()

for d in range(1,round(x**0.5)+1):

if x%d==0:

de.add(d)

de.add(x//d)

if len(de)>5:

de=sorted(de)

p=de[5]*de[1]*de[2]*de[3]*de[4]

if p<x:

zn.append(p)

print((zn)[:5])


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

Раздел кодификатора ФИПИ: