Шестое занятие углублённого курса: range и его границы, for против while, цифры числа, делители и простые числа, разложение на множители, перебор отрезка как в задании 25 ЕГЭ — уроки 11–13 плана
range(a, b) — числа от a до b − 1: правая граница не входит, до самого n доходит range(1, n + 1). range(n) начинается с нуля и даёт n чисел. Третье число — шаг: range(1, 10, 3) даёт 1, 4, 7; range(10, 0, −2) идёт вниз: 10, 8, 6, 4, 2. range(5, 1) без шага пуст. После for переменная хранит последнее пройденное значение; менять её внутри тела бесполезно.
Любой цикл переписывается другим. for — когда число шагов известно заранее (перебрать d от 1 до n), while — когда его определяет задача (пока делится, пока не нашли). После while в переменной первое неподошедшее значение, после for — последнее пройденное. В while шаг делает сам программист — иначе вечный цикл.
n % 10 — последняя цифра, n // 10 отрезает её; while n > 0 перебирает все. Накопитель стартует с нуля для суммы, с единицы для произведения, с 9 для минимума цифры; флаг «есть ли цифра» стартует с «нет».
for d in range(1, n + 1): if n % d == 0 — перебор всех делителей; счётчик даёт их количество, накопитель — сумму, m = d — наибольший. Делители ходят парами d и n // d, один из пары не больше корня из n; у точного квадрата одна пара схлопывается, поэтому делителей нечётное число: у 49 их три.
Ровно два делителя: 1 и само число. 1 — не простое, 2 — единственное чётное простое. Проверка: флаг prime = n > 1 ставится один раз до цикла, в цикле только сбивается; перебирать d достаточно, пока d · d ≤ n. Наименьший делитель больше единицы всегда простой.
d = 2; while n > 1: делится — снять d и поделить (d не двигать: он мог войти ещё раз), не делится — d = d + 1. 60 = 2 · 2 · 3 · 5. Если перебирать d только до корня, остаток n > 1 после цикла — тоже множитель (194 = 2 · 97). Ровно три делителя бывает у квадрата простого, четыре — у p · q или p³.
Перебрать числа отрезка по порядку, для каждого проверить свойство (число делителей, вид разложения), напечатать подходящие и что просят рядом — обычно делитель. Два вложенных цикла: внешний по отрезку, range(a, b + 1); внутренний по делителям, счётчик обнуляется перед ним. Строку с итогом печатать всегда, даже когда найдено ноль.
Шестое занятие углублённого курса: range и его границы, for против while, цифры числа, делители и простые числа, разложение на множители, перебор отрезка как в задании 25 ЕГЭ — уроки 11–13 плана
range(a, b) — числа от a до b − 1: правая граница не входит, до самого n доходит range(1, n + 1). range(n) начинается с нуля и даёт n чисел. Третье число — шаг: range(1, 10, 3) даёт 1, 4, 7; range(10, 0, −2) идёт вниз: 10, 8, 6, 4, 2. range(5, 1) без шага пуст. После for переменная хранит последнее пройденное значение; менять её внутри тела бесполезно.
Любой цикл переписывается другим. for — когда число шагов известно заранее (перебрать d от 1 до n), while — когда его определяет задача (пока делится, пока не нашли). После while в переменной первое неподошедшее значение, после for — последнее пройденное. В while шаг делает сам программист — иначе вечный цикл.
n % 10 — последняя цифра, n // 10 отрезает её; while n > 0 перебирает все. Накопитель стартует с нуля для суммы, с единицы для произведения, с 9 для минимума цифры; флаг «есть ли цифра» стартует с «нет».
for d in range(1, n + 1): if n % d == 0 — перебор всех делителей; счётчик даёт их количество, накопитель — сумму, m = d — наибольший. Делители ходят парами d и n // d, один из пары не больше корня из n; у точного квадрата одна пара схлопывается, поэтому делителей нечётное число: у 49 их три.
Ровно два делителя: 1 и само число. 1 — не простое, 2 — единственное чётное простое. Проверка: флаг prime = n > 1 ставится один раз до цикла, в цикле только сбивается; перебирать d достаточно, пока d · d ≤ n. Наименьший делитель больше единицы всегда простой.
d = 2; while n > 1: делится — снять d и поделить (d не двигать: он мог войти ещё раз), не делится — d = d + 1. 60 = 2 · 2 · 3 · 5. Если перебирать d только до корня, остаток n > 1 после цикла — тоже множитель (194 = 2 · 97). Ровно три делителя бывает у квадрата простого, четыре — у p · q или p³.
Перебрать числа отрезка по порядку, для каждого проверить свойство (число делителей, вид разложения), напечатать подходящие и что просят рядом — обычно делитель. Два вложенных цикла: внешний по отрезку, range(a, b + 1); внутренний по делителям, счётчик обнуляется перед ним. Строку с итогом печатать всегда, даже когда найдено ноль.