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

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

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

На­при­мер, для числа 10S  =  2 + 5  =  7.

Ответ:

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

Ре­ше­ние.

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

def prime(n):

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

if n%i==0: return False

return True

k = 1475000 - 1

count = 0

while count != 5:

delitel = []

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

if k%i == 0:

if prime(i):

delitel.append(i)

if prime(k // i):

delitel.append(k//i)

if len(delitel) > 0:

s = sum(delitel)

if s <= 42000 and s%6 ==0:

print(k)

count += 1

k -= 1

 

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

1474997

1474992

1474973

1474968

1474954

 

 

Ответ: 1474997 1474992 1474973 1474968 1474954.

 

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

def prostoe(n):

k=2

while k**2 <= n:

if n%k==0: return False

k+=1

return True

n,m = 1475000,0

while m < 5:

n-=1

k=2

d=set()

while k**2 <= n:

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

k+=1

sn = sum(x for x in d if prostoe(x))

if sn > 0 and sn <= 42000 and sn%6==0:

print(n)

m+=1


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