Иногда, когда я лениво пытаюсь учесть, какое число появляется передо мной, через некоторое время я понимаю, что это проще, чем я думал. Возьмем, 2156
к примеру: мне в конечном итоге пришло в голову, что и то, 21
и другое 56
является кратным 7
, и поэтому, безусловно 2156 = 21 x 100 + 56
, также является кратным 7
.
Ваша задача - написать некоторый код, который идентифицирует числа, которые легче вычислить из-за совпадения такого рода.
Точнее:
Напишите программу или функцию, которая принимает положительное целое число в n
качестве входных данных и возвращает истинное значение, если существует такой делитель d
(больше чем 1
), который n
можно разделить на два, чтобы получить два положительных целых числа, каждое из которых кратно d
; вернуть ложное значение, если нет.
- «Нарезанный пополам» означает то, что вы думаете: обычное представление base-10,
n
разделенное в некоторой точке на переднюю половину и заднюю половину, чтобы получить два других целых числа base-10. Это нормально, если второе целое имеет начальный ноль (но учтите, что оно должно быть положительным целым числом, поэтому разбиение1230
на123
и0
недопустимо). - Истинные и ложные значения могут зависеть от ввода. Например, если любое ненулевое целое число является правдивым на выбранном вами языке, вы можете вернуть делитель
d
или одну из «частей»n
(илиn
себя в этом отношении). - Например, любое четное число, содержащее не менее двух цифр в наборе
{2, 4, 6, 8}
, даст истинное значение: просто разделите его после первой четной цифры. Также, например, любое простое числоn
будет давать ложное значение, как и любое однозначное число. - Обратите внимание, что достаточно рассмотреть простые делители
d
. - Вы можете предположить, что ввод действителен (то есть, положительное целое число).
Это код-гольф , поэтому выигрывает самый короткий код в байтах. Но решения на всех языках приветствуются, поэтому мы можем стремиться к созданию самого короткого кода на каждом языке, а не только самого короткого кода в целом.
Контрольные примеры
(Вам нужно только вывести истинное или ложное значение; приведенные ниже аннотации приведены только для пояснения.) Некоторые входные данные, которые дают истинные значения:
39 (3 divides both 3 and 9)
64 (2 divides both 6 and 4)
497 (7 divides both 49 and 7)
990 (splitting into 99 and 0 is invalid; but 9 divides both 9 and 90)
2233 (11 divides both 22 and 33)
9156 (3 divides both 9 and 156; or, 7 divides both 91 and 56)
11791 (13 divides both 117 and 91)
91015 (5 divides both 910 and 15)
1912496621 (23 divides both 1912496 and 621; some splittings are multiples of 7 as well)
9372679892 (2473 divides both 937267 and 9892; some splittings are multiples of 2 as well)
Некоторые входные данные, которые дают ложные значения:
52
61
130 (note that 13 and 0 is not a valid splitting)
691
899
2397
9029
26315
77300 (neither 7730 and 0 nor 773 and 00 are valid splittings)
2242593803
¹ да, я действительно делаю это