Помогите дописать код на Python

Тролль Зумбагеш купил автомобиль! Теперь ему можно не ходить по маршруту, а ездить с комфортом. Но вот незадача - в наши края внезапно пришла зима...

Теперь Зумбагешу срочно требуется сменить колёса на своей машине с летних на зимние. Одно колесо крепится n болтами, болты расположены по кругу. Пронумеруем их по часовой стрелке от 0 до n-1. Один болт на каждом колесе - особый, называется "секретка". Будем считать, что секретка имеет номер s.

В руководстве по обслуживанию автомобиля Зумбагеш прочитал: "При закручивании болтов колеса закручивайте их с шагом через k болтов, передвигаясь по часовой стрелке, секретку закручивайте последней."

После этого он крепко задумался: а с какого по номеру болта нужно начинать процесс закручивания, чтобы закручивая каждый раз через k болтов по часовой стрелке, закрутить в итоге все, а последней закрутить секретку?

Input format В единственной строке содержится три числа через пробел n, k, s - общее число болтов, шаг, то есть через сколько болтов нужно закручивать и номер секретки. 3 ≤ n ≤ 1018, 0 ≤ k ≤ 1018, 0 ≤ s ≤ n-1. Гарантируется, что ответ существует, то есть найдется болт, начиная с которого можно, закручивая с шагом через k болтов по часовой стрелке, закрутить все болты, последним закрутив секретку.

Output format Вывести одно число - номер болта, начиная с которого можно, закручивая с шагом через k болтов по часовой стрелке, закрутить все болты, последним закрутив секретку.

import random
from array import array
n, k, s = (int(i) for i in input().split())
my_array = array('i', [])

for numbers in range(n):
    my_array.append(numbers)
for i in my_array:
    if i != s:

не могу найти сам алгоритм вывода нужного болта


Ответы (1 шт):

Автор решения: Zhihar

алгоритм элементарный

если, к примеру, k - простое число, то она вообще решается в 1 строчку через деления с остатком :)

но для общего решения

  1. перебрать начальные болты от 0 до k

  2. создать список с размером равным кол-ву болтов и записать в них False

  3. установить переменную с кол-вом незавинченных болтов в n

  4. ходить в цикле пока не будут завинчены все болты (т.е. кол-во незавинченных болтов не станет равным 0)

  5. проверить является ли текущий болт секретной и был ли он завинчен ранее (для чего нужен список созданный выше)

  6. если болт - секретка, а кол-во оставшихся незавинченных болтовне равно 1 - выйти из цикла и перейти к следующему начальному болту

  7. в списке для i-ого текущего болта установить значение True (болт завинчен)

  8. уменьшить кол-во незавинченных болтов

  9. если последний незавинченный болт - секретна - вывести информацию о найденной позиции первого болта

→ Ссылка