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

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

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

На­при­мер, для числа 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 = 1325000 - 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 <= 30000 and s%5 ==0:

print(k)

count += 1

k -= 1

 

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

1324994

1324992

1324991

1324986

1324980

 

Ответ: 1324994 1324992 1324991 1324986 1324980.

 

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

def prostoe(n):

k = 2

while k**2 <= n:

if n%k == 0: return False

k += 1

return True

def S(n):

d = set()

k = 2

while k**2 <= n:

if n%k == 0:

d |= {k,n//k}

k += 1

p = [x for x in d if prostoe(x)]

return sum(p) if p else 0

k,n = 0,1325000

while k < 5:

n -= 1

Sn=S(n)

if (0 < Sn <= 30000) and Sn%5 == 0:

k += 1

print(n)


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