Алгоритм вычисления функции \(F(a, \, b),\) где \(a\) и \(b\) – неотрицательные числа, задан следующими соотношениями:
Определите количество таких чисел \(n,\) принадлежащих отрезку \(100~000~000 \leqslant n \leqslant 200~000~000,\) для которых \(F(n, \, 105) = 1.\)
Решение:
Функция \(F(a, \, b)\) — это функция вычисления НОД по алгоритму Евклида. Вопрос задачи можно тогда переформулировать следующим образом: найти все числа на отрезке \(100~000~000 \leqslant n \leqslant 200~000~000,\) которые взаимно просты с числом \(105 = 3 \cdot 5 \cdot 7.\) Т.е., другими словами, не делящиеся ни на \(3,\) ни на \(5,\) ни на \(7.\) Это легко можно посчитать, используя формулу включения-исключения:
Python
d3 = (200_000_000 - 100_000_002) // 3 + 1
d5 = (200_000_000 - 100_000_000) // 5 + 1
d7 = (200_000_000 - 100_000_005) // 7 + 1
d15 = (200_000_000 - 100_000_005) // 15 + 1
d21 = (200_000_000 - 100_000_005) // 21 + 1
d35 = (200_000_000 - 100_000_005) // 35 + 1
d105 = (200_000_000 - 100_000_005) // 105 + 1
print(100_000_001 - d3 - d5 - d7 + d15 + d21 + d35 - d105)
Ответ: \(45714287\)
Эффективно готовьтесь к ЕГЭ по информатике с новым тренажёром, эмулирующем работу станции КЕГЭ, которая используется на реальном экзамене