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

Пусть S  — сумма квад­ра­тов ми­ни­маль­но­го и мак­си­маль­но­го на­ту­раль­ных де­ли­те­лей це­ло­го числа, не счи­тая еди­ни­цы и са­мо­го числа. Если таких де­ли­те­лей у числа нет, то зна­че­ние S счи­та­ет­ся рав­ным нулю. На­при­мер, для числа 20 имеем  S = 2 в квад­ра­те плюс 10 в квад­ра­те = 4 плюс 100 = 104. На­пи­ши­те про­грам­му, ко­то­рая пе­ре­би­ра­ет целые числа, мень­шие 900 000, в по­ряд­ке воз­рас­та­ния и ищет среди них такие, для ко­то­рых зна­че­ние S яв­ля­ет­ся про­стым чис­лом.

В от­ве­те за­пи­ши­те в пер­вом столб­це таб­ли­цы пер­вые пять най­ден­ных чисел в по­ряд­ке убы­ва­ния, а во вто­ром столб­це  — со­от­вет­ству­ю­щие им зна­че­ния S.

Ответ:

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

Ре­ше­ние.

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

def Div(x):

s = set()

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

if x%y == 0:

s |= {x//y, y}

return s if s else 0

 

li = []

for x in range(900000):

if len(li) == 5: break

if (v:=Div(x)):

ma, mi = max(v), min(v)

if not Div((v:=ma*ma + mi*mi)):

li.append([x, v])

[print(*i) for i in li[::-1]]

Ответ: 30; 229; 26; 173; 14; 53; 10; 29; 6; 13

 

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

k=1

m=[]

for i in range(2,10**9):

d = int(i**0.5)

a = []

for j in range(2,d+1):

if i%j == 0:

a.append(j)

if i//j != j:

a.append(i//j)

if len(a) >= 2:

s = min(a)**2 + max(a)**2

f = 1

d = int(s ** 0.5)

for j in range (2, d+1):

if s%j == 0:

f = 0

break

if f == 1:

m.append(str(i)+' '+ str(s))

k += 1

if k >= 6:

break

for j in range (len(m)-1,-1,-1):

print(m[j])

 

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

def prostoe(n):

if n<2: return False

k=2

while k**2<=n:

if n%k==0: return False

k+=1

return True

def s(n):

k=2

while k**2<=n:

if n%k==0: return k**2+(n//k)**2

k+=1

return 0

n=1

a=[]

while len(a)<5:

sn=s(n)

if prostoe(sn): a.append((n,sn))

n+=1

for x in a[::-1]: print(*x)

Источник: Проб­ный ЕГЭ Санкт-Пе­тер­бург, 20.02.2025. Ва­ри­ант 1