Задания
Версия для печати и копирования в MS Word
Тип Д17 № 35906
i

Назовём на­ту­раль­ное число под­хо­дя­щим, если у него ровно 3 раз­лич­ных про­стых де­ли­те­ля. На­при­мер, число 180 под­хо­дя­щее (его про­стые де­ли­те­ли  — 2, 3 и 5), а число 12  — нет (у него толь­ко два раз­лич­ных про­стых де­ли­те­ля). Опре­де­ли­те ко­ли­че­ство под­хо­дя­щих чисел, при­над­ле­жа­щих от­рез­ку [50 001; 90 000], а также наи­мень­шее из таких чисел. В от­ве­те за­пи­ши­те два целых числа: сна­ча­ла ко­ли­че­ство, затем наи­мень­шее число.

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

Ре­ше­ние.

Решим за­да­чу пе­ре­бо­ром. При­ведём ре­ше­ние дан­ной за­да­чи на языке PascalABC:

var del1, del2, count, min, i, j, k: longint;

begin

count := 0;

del1 := 0;

del2 := 0;

min := 90001;

for i := 50001 to 90000 do begin

for j := 2 to i-1 do begin

if i mod j = 0 then begin

for k := 2 to j-1 do begin

if j mod k = 0 then del2 := del2 + 1;

end;

if del2 = 0 then del1 := del1 + 1;

del2 := 0;

end;

end;

if del1 = 3 then begin

count := count + 1;

if min > i then min := i;

end;

del1 := 0;

end;

writeln(count, min);

end.

Ре­зуль­тат ра­бо­ты про­грам­мы  — 1558750001.

 

Ответ: 1558750001.

 

При­ве­дем дру­гое ре­ше­ние.

Будем рас­кла­ды­вать каж­дое число из за­дан­но­го диа­па­зо­на на про­стые мно­жи­те­ли. Един­ствен­ным чет­ным про­стым мно­жи­те­лем яв­ля­ет­ся число 2, по­это­му сна­ча­ла будем де­лить число на 2 до тех пор, пока ре­зуль­тат не ока­жет­ся не­чет­ным. Затем будем де­лить на каж­дое из не­чет­ных чисел до тех пор, пока ре­зуль­тат не пе­ре­ста­нет де­лить­ся на это число. За­ме­тим, что если ре­зуль­тат не де­лит­ся на не­ко­то­рое число, то он не де­лит­ся и на все числа, крат­ные этому числу, по­это­му число будет де­лить­ся толь­ко на про­стые не­чет­ные числа. Если число хотя бы один раз раз­де­ли­лось на не­ко­то­рое про­стое число, то к ко­ли­че­ству про­стых де­ли­те­лей (пе­ре­мен­ная del) будем при­бав­лять еди­ни­цу. Как толь­ко ко­ли­че­ство про­стых де­ли­те­лей ста­нет боль­ше 3, вы­хо­дим из цикла.

var del, del1, count, min, i, c, p: longint;

begin

count := 0;

min := 90001;

for i := 50001 to 90000 do begin

c:=i;

del:=0;

del1:=0;

while c mod 2 = 0 do begin

del1:=1;

c:=c div 2;

end;

del:=del+del1;

p:=3;

while c>1 do begin

del1:=0;

while c mod p = 0 do begin

del1:=1;

c:=c div p;

end;

del:=del+del1;

if del>3 then break;

p:=p+2;

end;

if del = 3 then begin

count := count + 1;

if min > i then min := i;

end;

end;

writeln(count, min);

end.