Может ли программист на северном полюсе с клавишей 0 запалить набрать число, состоящее только из единиц и кратное

Может ли программист на северном полюсе с клавишей "0" запалить набрать число, состоящее только из единиц и кратное заданному числу n? Входные данные для программы - любое число n (1 ≤ n ≤ 106).+ Выходные данные должны быть минимальным числом, удовлетворяющим требованиям, или "no", если такого числа не существует. Пример: Входные данные: 100+ Выходные данные: no Входные данные: 57 Входные данные: no
Yaroslav_898

Yaroslav_898

Чтобы ответить на этот вопрос, нам нужно понять, когда цифра 1, повторяемая несколько раз, будет кратна заданному числу n.

Рассмотрим следующую логику: если числа x и y делятся на n, то сумма или разность этих чисел также будет делиться на n. Мы можем использовать эту логику для решения данной задачи.

Заметим, что если мы присоединим ноль в конец числа, состоящего только из единиц, то новое число будет равно удвоенному предыдущему числу, взятому сумму с единицей или нулём (если x - число из единиц, то 10x = 2x + 1; если x - число из единиц, заканчивающееся на ноль, то 10x = 2x). Исходя из этого, у нас есть два возможных случая:

1. Если число n не делится на два, то программа на северном полюсе с клавишей "0" не сможет набрать число, состоящее только из единиц и кратное n. Почему? Предположим, что такое число существует. Пусть это число будет x. Если x делится на n, то 10x тоже должно делиться на n (согласно нашему предыдущему объяснению). Но, с другой стороны, 10x равно 2x (или 2x + 1), что означает, что 2x (2x + 1) также должно делиться на n. Но это противоречие, так как n не делится на два. Таким образом, в этом случае ответ должен быть "no".

2. Если число n делится на два, то на северном полюсе с клавишей "0" можно набрать число, состоящее только из единиц и кратное n. Как мы можем это сделать? Предположим, что число единиц, которое нам нужно набрать, равно k. Если k меньше или равно числу n, то мы можем нажать k раз клавишу "1" и затем клавишу "0", чтобы получить число, кратное n.

Теперь рассмотрим случай, когда k больше n. Мы можем использовать алгоритм деления с остатком для решения этой проблемы. Представим число, состоящее из k единиц, как число с остатком от деления на n. Это можно сделать следующим образом:

1. Начните с числа 1 и поделите его на n, сохраняя остаток.
2. Умножьте остаток на 10 и добавьте 1.
3. Повторите шаги 1 и 2, до тех пор, пока новый остаток не станет равным 1.
4. Когда остаток станет равным 1, вы получите число, состоящее из k единиц, кратное n.

Таким образом, программа может набрать число, состоящее только из единиц и кратное n, если число n делится на два, или "no", если это не так.
Знаешь ответ?
Задать вопрос
Привет!
hello