а) – а это уже палиндром
б) Сначала построим палиндром, кратный
Пусть A – число из цифр , записанных в обратном порядке (очевидно, что не оканчивается на 0 (иначе кратно 5), а значит A существует). Пусть также число цифр A равно n.
Тогда искомое число можно получить записав подряд число A, 10 нулей и . И правда, это число равно – кратно
Записав 3 раза подряд число B, получим палиндром, кратный 3. И правда: . Сумма цифр равна 3, а значит число кратно 3, а значит кратно . Повторив эту операцию уже с числом , получим , кратное уже . Наконец на 10ом шаге получим палиндром , кратный .
Т.к. B кратно , то кратно =
А значит палиндром, удовлетворяющий условию, существует.
Ч.т.д.
Найдите кратное трём восьмизначное число-палиндром, записанное цифрами 0 и 1, если известно, что в записи всех его простых делителей используются только цифры 1, 3 и 7 (числа-палиндромы читаются одинаково как слева направо, так и справа налево, например, 11011).
Спрятать решение
Решение.
Отметим следующее: поскольку в задаче требуется найти число-палиндром, то последняя цифра искомого числа, равно как и первая, должны быть равны 1; число делится на 3 тогда и только тогда, когда на 3 делится сумма его цифр.
Таким образом, нас интересует число вида где a, b, c равны 0 или 1, а имеет остаток 1 при делении на 3; т. е. должно иметь остаток 2 при делении на 3 . Следовательно, только одна из цифр a, b, c может быть равна нулю. Получаем, что надо проверить три числа: 10111101, 11011011 и 11100111. Отметим, что каждое из этих чисел кратно 11.
Два последних числа не удовлетворяют условиям задачи.
Ответ:
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 |
Доказать, что для любого натурального существует -значный десятичный палиндром, кратный 13.
|
|
|
grizzly |
Re: Палиндромы, кратные 13 29.08.2015, 12:12 |
||
09/09/14 |
|||
|
|||
lopkityu |
Re: Палиндромы, кратные 13 29.08.2015, 13:20 |
18/04/15 |
Пусть . Если хотя бы одно из них делится на 13, то все хорошо. Если же нет, рассматриваем числа вида . Все они дают разные остатки при делении на 13, а значит найдутся два числа, сумма которых будет палиндромом, кратным 13. — 29.08.2015, 13:28 — Слегка ошибся с набором чисел. Нужно брать , тогда сумма любых двух будет палиндромом. — 29.08.2015, 13:37 — И разность тоже Это на случай, если таки найдутся два одинаковых остатка. — 29.08.2015, 13:56 — И снова мимо: если взять , то эти числа работать не будут
|
|
|
grizzly |
Re: Палиндромы, кратные 13 29.08.2015, 15:47 |
||
09/09/14 |
|||
|
|||
Ktina |
Re: Палиндромы, кратные 13 29.08.2015, 16:29 |
01/12/11 |
grizzly lopkityu Всё гораздо проще!
|
|
|
grizzly |
Re: Палиндромы, кратные 13 29.08.2015, 16:55 |
||
09/09/14 |
Я думаю, что она на метле улетела что эту задачу в пятом классе вполне можно дать. А что в моём последнем решении может быть труднодоступно для пятиклассника?
|
||
|
|||
Ktina |
Re: Палиндромы, кратные 13 29.08.2015, 17:44 |
01/12/11 |
— 29.08.2015, 17:46 — grizzly Простите за нескромность, но мне кажется, что моё решение красивее. Ах, да, ещё трехзначный подобрать нужно… ну так 494 и станет нашей паршивой дастырбеточкой, в смысле самкой барана.
|
|
|
grizzly |
Re: Палиндромы, кратные 13 29.08.2015, 17:54 |
||
09/09/14 |
Простите за нескромность, но мне кажется, что моё решение красивее. Насчёт красивее не поспоришь
|
||
|
|||
Ktina |
Re: Палиндромы, кратные 13 29.08.2015, 19:09 |
01/12/11 |
grizzly Честно признаюсь, никаких рассуждений и не было, чистая интуиция.
|
|
|
grizzly |
Re: Палиндромы, кратные 13 29.08.2015, 19:12 |
||
09/09/14 |
Ktina Ничего не имею против, но, боюсь, Вы несколько преувеличили возможности детской интуиции
|
||
|
|||
DanilovV |
Re: Палиндромы, кратные 13 29.08.2015, 20:34 |
17/04/15 |
Из серии “как проверить калькулятор” Код: 11=1001 или 13 на семерки
|
|
|
Ktina |
Re: Палиндромы, кратные 13 29.08.2015, 23:34 |
01/12/11 |
DanilovV — 29.08.2015, 23:41 — Ktina Ничего не имею против, но, боюсь, Вы несколько преувеличили возможности детской интуиции Оригинальное условие задачи было здесь и звучало так:
|
|
|
grizzly |
Re: Палиндромы, кратные 13 30.08.2015, 00:10 |
||
09/09/14 |
В общем, просто повезло, такое редко бывает. Ну нельзя так всё сваливать на одно везение 🙂 Наблюдательность с привычкой подмечать всё интересное зачастую и лежит в основе такого везения.
|
||
|
|||
DanilovV |
Re: Палиндромы, кратные 13 30.08.2015, 03:03 |
17/04/15 |
Ktina Это как Цитата: Назовем натуральное число палиндромом, если при перестановке его цифр в обратном порядке оно не изменяется. Докажите, что существует палиндром, делящийся на 2100. Палиндром заканчивающий нулями? Такое возможно? Наверно возможно, иначе никак.
|
|
|
Shadow |
Re: Палиндромы, кратные 13 30.08.2015, 09:18 |
26/08/11 |
Ах, да, ещё трехзначный подобрать нужно… ну так 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("Это не палиндром")
}
Здесь мы использовали другой метод пересборки:
- X.toString() — переводит число в строку.
- split(“”) — разбивает строку на массив из символов. В кавычках принцип разделения — если бы там была точка, то разделили бы на местах точек. А так как там пустота, то делится вообще по каждому из символов.
- reverse() — меняет элементы в массиве в обратном порядке.
- join(“”) — добавляет результат к пустой строке, чтобы на выходе получить строку в обратном порядке.
Решение без строк
Тем, кто справился с первой частью, предлагают задачу со звёздочкой — сделать то же самое, но не используя строки, а работая только с числами. Попробуем и мы.
Сделаем в JavaScript функцию, которая будет возвращать true, если в переменной лежит палиндром, и false — если нет. Всё остальное будем писать внутри этой функции:
function palindrome(x) {
}
Теперь обработаем три стандартные ситуации:
- Если в переменной лежит ноль, то это палиндром.
- Если переменная меньше ноля, то это не палиндром.
- Если переменная делится на 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 и не подглядывая в наш код.
Вёрстка:
Кирилл Климентьев