Как найти палиндром кратный числу

а) 2^3=8 – а это уже палиндром

б) Сначала построим палиндром, кратный 2^{10}

Пусть A – число из цифр 2^{10}, записанных в обратном порядке (очевидно, что 2^{10} не оканчивается на 0 (иначе 2^{10} кратно 5), а значит A существует). Пусть также число цифр A равно n.

Тогда искомое число можно получить записав подряд число A, 10 нулей и 2^{10}. И правда, это число равно B=A*10^n*10^{10}+2^{10}=A*10^n*5^{10}*2^{10}+2^{10}=2^{10}*(A*10^n*5^{10}+1) – кратно 2^{10}

Записав 3 раза подряд число B, получим палиндром, кратный 3. И правда: B^{(1)}=overline{BBB}=B*10...010...01. Сумма цифр 10...010...01 равна 3, а значит число кратно 3, а значит B^{(1)} кратно 3*B. Повторив эту операцию уже с числом B^{(1)}, получим B^{(2)}, кратное уже 3^2*B. Наконец на 10ом шаге получим палиндром B^{(10)}, кратный 3^{10}*B.

Т.к. B кратно 2^{10}, то B^{(10)} кратно 3^{10}*2^{10}=6^{10}

А значит палиндром, удовлетворяющий условию, существует.

Ч.т.д.

Найдите кратное трём восьмизначное число-палиндром, записанное цифрами 0 и 1, если известно, что в записи всех его простых делителей используются только цифры 1, 3 и 7 (числа-палиндромы читаются одинаково как слева направо, так и справа налево, например, 11011).

Спрятать решение

Решение.

Отметим следующее: поскольку в задаче требуется найти число-палиндром, то последняя цифра искомого числа, равно как и первая, должны быть равны 1; число делится на 3 тогда и только тогда, когда на 3 делится сумма его цифр.

Таким образом, нас интересует число вида overline1 a b c c b a 1, где a, b, c равны 0 или 1, а 2 левая круглая скобка a плюс b плюс c правая круглая скобка имеет остаток 1 при делении на 3; т. е. a плюс b плюс c должно иметь остаток 2 при делении на 3 . Следовательно, только одна из цифр a, b, c может быть равна нулю. Получаем, что надо проверить три числа: 10111101, 11011011 и 11100111. Отметим, что каждое из этих чисел кратно 11.

 begingathered 10111101=3 умножить на 7 в квадрате умножить на 11 умножить на 13 в квадрате умножить на 37, 11011011=3 умножить на 11 умножить на 333667, quad 11100111=3 умножить на 11 умножить на 37 умножить на 9091 . endgathered

Два последних числа не удовлетворяют условиям задачи.

Ответ: 10111101=3 умножить на 7 в квадрате умножить на 11 умножить на 13 в квадрате умножить на 37.

As you have rightly mentioned, we need to figure out all tuples of $(X,Y,Z)$ such that $$2(X+Y)+Zbmod 9 = 0 implies 2(X+Y)bmod 9 = (9-Z)bmod 9.tag{1}$$
Note that for any value of $2(X+Y)bmod 9=0,1,ldots,8$, the corresponding value of $(X+Y)bmod 9$ is unique. Also, for any given $k=0,1,ldots,8$, the tuples that satisfy $(X+Y)bmod 9=k$ are given by
$$(k, 9) text{ and } (X,k-Xbmod 9) text{ for } X=1,2,ldots,9.$$ So, there are $10$ tuples $(X,Y)$ corresponding to any given value of $2(X+Y)bmod 9$.

Further, for any given value of $2(X+Y)bmod 9$ in $(1)$, the corresponding value of $Z$ is also unique except when $2(X+Y)bmod 9 = 0$. When $2(X+Y)bmod 9 = 0$, $Z$ can either be $0$ or $9$. Consequently, with $2(X+Y)bmod 9=1,2,ldots,8$, there are $80$ palindromes divisible by $9$, and with $2(X+Y)bmod 9=0$, there are $20$ palindromes divisible by $9$.

Hence, the total number of $5-$digit palindromes divisible by $9$ is $100$.

Сообщения без ответов | Активные темы | Избранное

 

Палиндромы, кратные 13

Сообщение29.08.2015, 11:42 

Аватара пользователя


01/12/11

8634

Доказать, что для любого натурального $ngeqslant 3$ существует $n$-значный десятичный палиндром, кратный 13.
(УрТЮМ, обобщение)

Профиль  

grizzly 

Re: Палиндромы, кратные 13

Сообщение29.08.2015, 12:12 

Заслуженный участник
Аватара пользователя


09/09/14
6328

Профиль  

lopkityu 

 Re: Палиндромы, кратные 13

Сообщение29.08.2015, 13:20 


18/04/15
38

Пусть $ a=10^{n-1}+1, b=sumlimits_{i=0}^{n-3}10^{i} $. Если хотя бы одно из них делится на 13, то все хорошо. Если же нет, рассматриваем числа вида $ a+10qb, 0leq qleq 9 $. Все они дают разные остатки при делении на 13, а значит найдутся два числа, сумма которых будет палиндромом, кратным 13.

— 29.08.2015, 13:28 —

Слегка ошибся с набором чисел. Нужно брать $ a, a+10b, a+20b, a+30b, 2a+30b, 3a+30b, 4a+30b $, тогда сумма любых двух будет палиндромом.

— 29.08.2015, 13:37 —

И разность тоже :D Это на случай, если таки найдутся два одинаковых остатка.

— 29.08.2015, 13:56 —

И снова мимо: если взять $ n=8 $, то эти числа работать не будут :facepalm:

Профиль  

grizzly 

Re: Палиндромы, кратные 13

Сообщение29.08.2015, 15:47 

Заслуженный участник
Аватара пользователя


09/09/14
6328

Профиль  

Ktina 

Re: Палиндромы, кратные 13

Сообщение29.08.2015, 16:29 

Аватара пользователя


01/12/11

8634

grizzly

lopkityu

Всё гораздо проще!
Я думаю, что она на метле улетела что эту задачу в пятом классе вполне можно дать.

Профиль  

grizzly 

Re: Палиндромы, кратные 13

Сообщение29.08.2015, 16:55 

Заслуженный участник
Аватара пользователя


09/09/14
6328

Я думаю, что она на метле улетела что эту задачу в пятом классе вполне можно дать.

А что в моём последнем решении может быть труднодоступно для пятиклассника?

Профиль  

Ktina 

 Re: Палиндромы, кратные 13

Сообщение29.08.2015, 17:44 

Аватара пользователя


01/12/11

8634

— 29.08.2015, 17:46 —

grizzly

Простите за нескромность, но мне кажется, что моё решение красивее.
Сколько будет 77 умножить на 13?
А 777?
А 7777?

Ах, да, ещё трехзначный подобрать нужно… ну так 494 и станет нашей паршивой дастырбеточкой, в смысле самкой барана.

Профиль  

grizzly 

Re: Палиндромы, кратные 13

Сообщение29.08.2015, 17:54 

Заслуженный участник
Аватара пользователя


09/09/14
6328

Простите за нескромность, но мне кажется, что моё решение красивее.

Насчёт красивее не поспоришь :D
А насчёт проще, я пока не сообразил, как до него должен додуматься пятиклассник.
Ход рассуждений, который приводит к моему решению понятен, я надеюсь, и вполне доступен / естественен для пятиклассника — это несложная двухходовка. А можете поделиться наброском рассуждения, приводящего к Вашему решению?

Профиль  

Ktina 

Re: Палиндромы, кратные 13

Сообщение29.08.2015, 19:09 

Аватара пользователя


01/12/11

8634

grizzly

Честно признаюсь, никаких рассуждений и не было, чистая интуиция.

Профиль  

grizzly 

Re: Палиндромы, кратные 13

Сообщение29.08.2015, 19:12 

Заслуженный участник
Аватара пользователя


09/09/14
6328

Ktina

Ничего не имею против, но, боюсь, Вы несколько преувеличили возможности детской интуиции :D

Профиль  

DanilovV 

Re: Палиндромы, кратные 13

Сообщение29.08.2015, 20:34 


17/04/15
46

Из серии “как проверить калькулятор”
умножаем 91 на единички

Код:

11=1001
111=10101
1111=101101
11111=1011101

или 13 на семерки

Профиль  

Ktina 

 Re: Палиндромы, кратные 13

Сообщение29.08.2015, 23:34 

Аватара пользователя


01/12/11

8634

DanilovV

:appl:

— 29.08.2015, 23:41 —

Ktina

Ничего не имею против, но, боюсь, Вы несколько преувеличили возможности детской интуиции :D

Оригинальное условие задачи было здесь и звучало так:
“Назовем натуральное число палиндромом, если при перестановке его цифр в обратном порядке оно не изменяется. Докажите, что существует 101-значный палиндром, делящийся на 13. “
Вот мне сразу и вспомнилось, что $1001=7cdot 11cdot 13=13cdot 77$
Дай, — думаю, — на 777 умножу. В общем, просто повезло, такое редко бывает.

Профиль  

grizzly 

 Re: Палиндромы, кратные 13

Сообщение30.08.2015, 00:10 

Заслуженный участник
Аватара пользователя


09/09/14
6328

В общем, просто повезло, такое редко бывает.

Ну нельзя так всё сваливать на одно везение 🙂 Наблюдательность с привычкой подмечать всё интересное зачастую и лежит в основе такого везения.

Профиль  

DanilovV 

Re: Палиндромы, кратные 13

Сообщение30.08.2015, 03:03 


17/04/15
46

Ktina

Это как

Цитата:

Назовем натуральное число палиндромом, если при перестановке его цифр в обратном порядке оно не изменяется. Докажите, что существует палиндром, делящийся на 2100.

Палиндром заканчивающий нулями? Такое возможно? Наверно возможно, иначе никак.

Профиль  

Shadow 

Re: Палиндромы, кратные 13

Сообщение30.08.2015, 09:18 


26/08/11
2022

Ах, да, ещё трехзначный подобрать нужно… ну так 494 и станет нашей паршивой дастырбеточкой, в смысле самкой барана.

$494000cdots 000494$ вроде делится на $494$ при любом количестве нулей

Профиль  

Модераторы: Модераторы Математики, Супермодераторы

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей

Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Продолжаем разбирать задачки с сайта Leetcode. В прошлый раз было про массив и сумму чисел, теперь тоже необычное. 

Условия

В переменной X лежит какое-то целое число

Задача — проверить, является ли это число палиндромом.

Задача со звёздочкой — проверить на наличие палиндрома, не используя строки.

Палиндром — это когда строка или число одинаково читается в прямом и обратном направлении:

121 — это палиндром.

А роза упала на лапу Азора — тоже палиндром (если не считать заглавных букв).

12321 — и это палиндром.

Решение, где используем строки

Самый простой способ проверить, число в переменной палиндром или нет, — преобразовать его в строку, выставить знаки задом наперёд и сравнить с оригиналом. Этим мы сразу решаем проблему отрицательных чисел, когда «−121»превращается в «121−» и сразу становится ясно, что это не палиндром.

Сначала решим это на Python. Тут вообще суть в одной строке:

X = 121
if str(X) == str(X)[::-1]:
    print("Это палиндром")
else:
    print("Это не палиндром")

Здесь мы использовали трюк с переворачиванием строки без её изменения — применили конструкцию [::-1]. Работает это так:

  • Первым параметром указывают начало, откуда начинать обработку строки. Раз ничего не указано, то начинаем с первого символа.
  • Второй параметр — на каком по счёту символе надо остановиться. Здесь тоже ничего нет, поэтому алгоритм пройдёт до конца строки.
  • Последний параметр — шаг и направление обработки. У нас указана минус единица, значит, алгоритм обработает строку справа налево, на каждом шаге считывая по символу.
  • В итоге этот код вернёт нам строку, собранную в обратном порядке, при этом с оригинальной строкой ничего не случится — она останется неизменной.

Мы уже делали похожие штуки, когда писали свой генератор новых слов, но там было одно двоеточие, а здесь два.

Теперь решим это же, но на JavaScript:

var X = 121;
if (X.toString().split("").reverse().join("") == X.toString()) {
    console.log("Это палиндром")
} else {
    console.log("Это не палиндром")
}

Здесь мы использовали другой метод пересборки:

  1. X.toString() — переводит число в строку.
  2. split(“”) — разбивает строку на массив из символов. В кавычках принцип разделения — если бы там была точка, то разделили бы на местах точек. А так как там пустота, то делится вообще по каждому из символов.
  3. reverse() — меняет элементы в массиве в обратном порядке.
  4. join(“”) — добавляет результат к пустой строке, чтобы на выходе получить строку в обратном порядке.

Решение без строк

Тем, кто справился с первой частью, предлагают задачу со звёздочкой — сделать то же самое, но не используя строки, а работая только с числами. Попробуем и мы.

Сделаем в JavaScript функцию, которая будет возвращать true, если в переменной лежит палиндром, и false — если нет. Всё остальное будем писать внутри этой функции:

function palindrome(x) {
}

Теперь обработаем три стандартные ситуации:

  1. Если в переменной лежит ноль, то это палиндром.
  2. Если переменная меньше ноля, то это не палиндром.
  3. Если переменная делится на 10 без остатка — это тоже не палиндром.

Запишем это на JavaScript:

function palindrome(x) {
    // если перед нами ноль — это палиндром
    if(x == 0) {
        return true;
    }
    // если число меньше нуля или делится на 10 без остатка — это не палиндром
    if(x < 0 || x%10 == 0){
        return false;
    }
}

Чтобы проверить, является ли число палиндромом или нет, можно сделать так: отрезаем от числа цифры справа по одной, добавляем их в начало нового числа и постоянно сравниваем новое и старое значение. Если они станут равны — перед нами палиндром. Читайте комментарии, чтобы вникнуть в то, что происходит в коде:

function palindrome(x) {
    // если перед нами ноль — это палиндром
    if(x == 0) {
        return true;
    }
    // если число меньше нуля или делится на 10 без остатка — это не палиндром
    if(x < 0 || x%10 == 0){
        return false;
    }
    // сюда будем собирать число в обратном порядке
    temp = 0;
    // а тут будем хранить промежуточные значения икса
    preX = x;
    // пока не дойдём до середины числа — повторяем цикл
    while (x > temp) {
        // берём самую правую цифру в числе — это остаток от деления на 10
        pop = x%10;
        // запоминаем старое значение переменной X
        preX = x;
        // и отрезаем от переменной последнюю цифру — делаем это через целую часть деления на 10
        x /= 10;
        // добавляем отрезанную цифру к обратной переменной
        temp = temp*10 + pop;
    }
    // если обратная переменная совпала с оставшейся половиной исходной переменной — это палиндром
    // мы добавляем сравнение с предыдущей версией исходной половины (которая на 1 цифру больше) на тот случай, если исходное число состояло из нечётного количества символов и его нельзя было бы разбить строго пополам
    if(x == temp || preX == temp)
        return true;
    // 
    else
        return false;
};

Для запуска кода просто вызываем функцию и передаём её нашу переменную:

// запускаем код
var X = 121;
console.log(palindrome(X));

Чтобы попрактиковаться, попробуйте сделать такое же, но на Python и не подглядывая в наш код.

Вёрстка:

Кирилл Климентьев

Добавить комментарий