Обозначим через F целую часть среднего арифметического всех натуральных делителей целого числа, кроме единицы и самого числа. Если таких делителей у числа нет, то считаем значение F равным нулю.
Напишите программу, которая перебирает целые числа, большие 750 000, в порядке возрастания и ищет среди них такие, для которых значение F при делении на 7 даёт в остатке 6. Выведите первые 5 найденных чисел в порядке возрастания и справа от каждого числа — соответствующее значение F.
Ответ:
Приведём решение на языке 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
k = 0
for x in range(750001, 10**10):
if k == 5: break
if (Pr:=Div(x)):
F = sum(Pr)//len(Pr)
if F%7==6:
print(x, F); k += 1
Ответ: 750002 35482; 750007 16316; 750021 125005; 750022 29392; 750024 31919.
Приведём решение Бориса Савельева на языке Python.
k = 1
for i in range(750000+1,10000000000000):
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)>0:
f = int(sum(a)/len(a))
if f%7 == 6:
print(i,f)
k += 1
if k >= 6:
break
Приведём решение Юрия Красильникова на языке Python.
def F(n):
d = set()
k = 2
while k**2 <= n:
if n%k == 0:
d |= {k,n//k}
k += 1
return int(sum(d)/len(d)) if d else 0
k,n = 0,750000
while k < 5:
n += 1
Fn=F(n)
if Fn%7 == 6:
k += 1
print(n,Fn)

