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

На­пи­ши­те про­грам­му, ко­то­рая ищет среди целых чисел, при­над­ле­жа­щих чис­ло­во­му от­рез­ку [174457; 174505], числа, име­ю­щие ровно два раз­лич­ных на­ту­раль­ных де­ли­те­ля, не счи­тая еди­ни­цы и са­мо­го числа. Для каж­до­го най­ден­но­го числа за­пи­ши­те эти два де­ли­те­ля в два со­сед­них столб­ца на экра­не с новой стро­ки в по­ряд­ке воз­рас­та­ния про­из­ве­де­ния этих двух де­ли­те­лей. Де­ли­те­ли в стро­ке также долж­ны сле­до­вать в по­ряд­ке воз­рас­та­ния.

На­при­мер, в диа­па­зо­не [5; 9] ровно два раз­лич­ных на­ту­раль­ных де­ли­те­ля имеют числа 6 и 8, по­это­му для этого диа­па­зо­на вывод на экра­не долж­на со­дер­жать сле­ду­ю­щие зна­че­ния:

2 3

2 4

Ответ:

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

Ре­ше­ние.

Решим за­да­чу пе­ре­бо­ром. Будем про­ве­рять ко­ли­че­ство де­ли­те­лей каж­до­го числа из диа­па­зо­на, если их ко­ли­че­ство равно двум  — за­пи­сы­ва­ем их в мас­сив d.

 

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

var

numDel, i, j: longint;

d: array[1..2] of longint;

begin

for i := 174457 to 174505 do begin

numDel := 0;

for j := 2 to i div 2 do begin

if i mod j = 0 then begin

numDel := numDel + 1;

if numDel > 2 then break;

d[numDel] := j;

end;

end;

if numDel = 2 then writeln(d[1], ' ', d[2]);

end;

end.

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

3 58153

7 24923

59 2957

13 13421

149 1171

5 34897

211 827

2 87251

 

При­ведём ре­ше­ние Вла­ди­ми­ра Лу­кьян­чи­ко­ва на языке Pascal.

uses school;

begin

for var i := 174457 to 174505 do begin

var w := i.Divisors;

if w.Count = 4 then println(w[1], w[2]);

end;

end.

 

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

def f(x):

k=2

deliteli=set()

while k * k <= x:

if x % k==0:

deliteli.add(k)

if x // k < x:

deliteli.add(x // k)

k = k + 1

return sorted(deliteli)

start = 174457

end = 174505

for i in range(start, end + 1):

if len(f(i)) == 2:

print(f(i))

 

При­ведём ре­ше­ние Мак­си­ма Глин­ских на языке Python.

for x in range(174457,174505+1):

k=0

s=[]

for y in range(2,x//2+1):

if x%y==0:

k+=1

s.append(y)

if k>2:

break

if k==2:

print(*s)


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

Источник: Де­мон­стра­ци­он­ная вер­сия ЕГЭ−2021 по ин­фор­ма­ти­ке
Раздел кодификатора ФИПИ: