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

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

На­при­мер, в диа­па­зо­не [2; 48] ровно шесть чётных раз­лич­ных на­ту­раль­ных де­ли­те­лей имеют числа 24, 36 и 40, по­это­му для этого диа­па­зо­на вывод на экра­не долж­на со­дер­жать сле­ду­ю­щие зна­че­ния:

2 4 6 8 12 24

2 4 6 12 18 36

2 4 8 10 20 40

 

Ответ:

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

Ре­ше­ние.

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

 

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

var

numDel, i, j: longint;

d2: array[1..6] of longint;

begin

for i := 125256 to 125330 do begin

numDel := 0;

for j := 1 to i do begin

if (i mod j = 0) and (j mod 2 = 0) then begin

numDel := numDel + 1;

if numDel > 6 then break;

d2[numDel] := j;

end;

end;

if numDel = 6 then writeln(d2[1], ' ', d2[2], ' ', d2[3], ' ', d2[4], ' ', d2[5], ' ', d2[6]);

end;

end.

 

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

2 6 18 13918 41754 125262

2 4 8 31322 62644 125288

2 6 18 13922 41766 125298

 

При­ведём ре­ше­ние Ви­та­са Ре­мей­ки­са на языке Python.

for num in range(125256, 125331):

d = []

for j in range(1, int(num**0.5) + 1):

if num % j == 0:

if j % 2 == 0:

d.append(j)

if num//j % 2 == 0 and num//j != j:

d.append(num//j)

if len(d) == 6:

d.sort()

print(d[0], d[1], d[2], d[3], d[4], d[5])

 

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

for x in range(125256,125331):

kl=[]

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

if x%d==0:

kl.append(d)

if len(kl)>5:

break

if len(kl)==5:

print(kl,x)

 

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

def div(x):

d = set()

for i in range(1,int(x**0.5)+1):

if x%i==0:

d.add(i)

d.add(x//i)

return sorted(d)

for x in range(125256,125331):

d = [x for x in div(x) if x%2==0]

if len(d)==6:

print(d)

 

При­ведём ре­ше­ние Егора Чер­не­цо­ва на языке Python.

for n in range(125256, 125331):

d = [i for i in range(2, n + 1, 2) if n % i == 0]

if len(d) == 6:

print(*d)

 

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

def chetdel(n):

d = set()

k = 1

while k**2 <= n:

if n%k == 0: d |= {k,n//k}

k += 1

return sorted([x for x in d if x%2 == 0])

for n in range(125256,125330+1):

cd = chetdel(n)

if len(cd) == 6: print(*cd)

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