25
Пусть M - разность максимального и минимального натуральных делителей целого числа, не считая единицы и самого числа. Если таких делителей у числа нет, то считаем значение M равным нулю. Напишите программу, которая перебирает целые числа, большие 750 000, в порядке возрастания и ищет среди них такие, для которых значение M не равно нулю и оканчивается на 7. Программа должна найти и вывести первые 5 таких чисел и соответствующие им значения M. Формат вывода: для каждого из 5 таких найденных чисел в отдельной строке сначала выводится само число, затем значение M. Строки выводятся в порядке возрастания найденных чисел. Например, для числа 105 M = 35 - 3 = 32.
for n in range(750_001, 1_000_000+1):
m = 0
k = []
for d in range (1,n):
if n%d==0:
k.append(d)
if len(k)>=2: m = max(k) - min(k)
if m != 0 and m%10==7:
print(n, m)
это решение эффективнее:
cnt = 0
for n in range(750_001, 1_000_000+1):
m = 0
for d in range(2,round(n**0.5) +1 ): - проверка на простые числа
if n%d==0:
m = n//d - d
break
if m != 0 and m%10==7:
cnt +=1
print (n,m)
if cnt == 5:
break
Пусть S - сумма различных натуральных делителей целого числа, являющихся простыми числами, не считая самого числа. Напишите программу, которая перебирает целые числа, большие 450 000, в порядке возрастания и ищет среди них такие, для которых значение S кратно 17 и не равно 0. Программа должна найти и вывести первые 4 таких числа и соответствующие им значения S.
Формат вывода: для каждого из 4 таких найденных чисел в отдельной строке сначала выводится само число, затем значение S. Строки выводятся в порядке возрастания найденных чисел.
Например, для числа 20 S = 2 + 5 = 7.
def f(n):
ok = True
for d in range(2, round(n**0,5)+1):
if n%d == 0:
ok = False
return ok
cnt = 0
for n in range(450_001, 500_001):
s=0
for d in range(2, round(n**0.5)+1):
if n%d==0:
if f(d):
s+=d
if f(n//d):
s += n//d
if s%17==0 and s !=0:
cnt +=1
print(n, s)
if cnt==4:
break