Условие: № 6059 (Уровень: Базовый)
- Статья подготовлена командой itpy, подписывайтесь на наш телеграм канал!
В файле представлена последовательность чисел от 0 от 10000 включительно. Необходимо определить количество пар, где имеется два четных натуральных числа с наибольшим общими делителем, превышающим число 100, и указать наибольшую возможную разность между числами в паре. Известно, что парой принято называть два стоящих подряд числа.
Файлы к заданию: 17.txt
import math as m
M = [int(i) for i in open('17.txt')]
count = 0
maxi = 0
for i in range(0, len(M)-1):
if M[i] % 2 == 0 and M[i+1] % 2 == 0:
if m.gcd(M[i], M[i+1]) > 100:
count += 1
maxi = max(maxi, abs(M[i] - M[i+1]))
print(count, maxi)
Комментарии к первому решению:
- import math as m - импортируем библиотеку math и задаем ему псевдоним m.
- M = [int(i) for i in open('17.txt')] - открываем файл '17.txt' и читаем его содержимое, преобразуя каждую строку в целое число. Результат сохраняется в списке M.
- count = 0 - создаём переменную count значением 0.
- maxi = 0 - создаём переменную maxi значением 0.
- for i in range(0, len(M)-1): - пробегаем цикл, перебирая индексы элементов списка M от 0 до len(M)-1.
- if M[i] % 2 == 0 and M[i+1] % 2 == 0: - проверяем, являются ли текущий элемент и следующий элемент четными числами.
- if m.gcd(M[i], M[i+1]) > 100: - проверяем, является ли НОД (наибольший общий делитель) текущего и следующего элементов больше 100.
- count += 1 - увеличиваем значение переменной count на 1.
- maxi = max(maxi, abs(M[i] - M[i+1])) - обновляем значение переменной maxi, выбирая максимальное значение между текущим значением maxi и абсолютной разницей между текущим и следующим элементами.
- print(count, maxi) - выводим значения переменных count и maxi.
def NOD(a, b):
big_divisors = 1
for j in range(1, min(a, b)+1):
if a % j == 0 and b % j == 0:
big_divisors = j
return big_divisors
M = [int(i) for i in open('17.txt')]
count = 0
maxi = 0
for i in range(0, len(M)-1):
if M[i] % 2 == 0 and M[i+1] % 2 == 0:
if NOD(M[i], M[i+1]) > 100:
count += 1
maxi = max(maxi, abs(M[i] - M[i+1]))
print(count, maxi)
Комментарии ко второму решению:
- def NOD(a, b): - создаём функцию NOD с двумя параметрами a и b.
- big_divisors = 1 - инициализируем переменную big_divisors значением 1.
- for j in range(1, min(a, b)+1): - пробегаем цикл, перебирая значения переменной j от 1 до минимального значения между a и b плюс 1.
- if a % j == 0 and b % j == 0: - проверяем, являются ли a и b делителями переменной j.
- big_divisors = j -присваиваем переменной big_divisors значение переменной j.
- return big_divisors - возвращаем значение переменной big_divisors из функции NOD.
- M = [int(i) for i in open('17.txt')] - открываем файл '17.txt' и читаем его содержимое, преобразуя каждую строку в целое число. Результат сохраняется в списке M.
- count = 0 - создаём переменную count значением 0.
- maxi = 0 - создаём переменную maxi значением 0.
- for i in range(0, len(M)-1): - пробегаем цикл, перебирая индексы элементов списка M от 0 до len(M)-1.
- if M[i] % 2 == 0 and M[i+1] % 2 == 0: - проверяем, являются ли текущий элемент и следующий элемент четными числами.
- if NOD(M[i], M[i+1]) > 100: - проверяем, является ли НОД (наибольший общий делитель) текущего и следующего элементов больше 100.
- count += 1 - увеличиваем значение переменной count на 1.
- maxi = max(maxi, abs(M[i] - M[i+1])) - обновляем значение переменной maxi, выбирая максимальное значение между текущим значением maxi и абсолютной разницей между текущим и следующим элементами.
- print(count, maxi) - выводим значения переменных count и maxi.