Іноді, коли я складно намагаюся підрахувати будь-яке число, яке спливе перед мною¹, через деякий час я розумію, що це простіше, ніж я думав. Візьмемо 2156
для прикладу: мені врешті-решт здається, що обидва 21
і 56
є кратними 7
, і так, безумовно 2156 = 21 x 100 + 56
, також є кратним 7
.
Ваше завдання - написати якийсь код, який ідентифікує числа, які легше визначити через збіг такого роду.
Точніше:
Напишіть програму або функцію, яка приймає позитивне ціле число n
як вхідне, і повертає істинне значення, якщо існує дільник d
(більший за 1
), такий, який n
може бути розрізаний на два, щоб отримати два додатних цілих числа, кожне з яких є кратним d
; повернути помилкове значення, якщо ні.
- "Розрізаний на два" означає те, що ви думаєте: звичайне представлення бази-10
n
в якомусь моменті розділене на передню половину і задню половину, щоб отримати два інших цілих бази-10. Це нормально , якщо друге число має провідне число (але врахуйте , що він повинен бути позитивним цілим числом, так розщепленню1230
в123
і0
не діє). - Цінні і хибні значення можуть залежати від вхідних даних. Наприклад, якщо якесь ненулеве ціле число є істинним у вашій вибраній мові, ви можете повернути дільник
d
або один із "шматочків"n
(абоn
себе з цього приводу). - Наприклад, будь-яке парне число з принаймні двома цифрами в наборі
{2, 4, 6, 8}
дасть триєдне значення: просто розділіть його після першої парної цифри. Наприклад, наприклад, будь-яке просте числоn
дасть помилкове значення, як і будь-яке одноцифрове число. - Зауважте, що достатньо розглянути основні дільники
d
. - Ви можете вважати, що введення дійсне (тобто додатне ціле число).
Це код-гольф , тому найкоротший код у байтах виграє. Але рішення на всіх мовах вітаються, тому ми можемо прагнути до найкоротшого коду на кожній мові, а не лише до найкоротшого коду в цілому.
Тестові кейси
(Потрібно вивести лише значення "фальшива" чи "хибна"; наведені нижче пояснення пояснюються лише поясненнями.) Деякі вхідні дані, які дають значення "truthy":
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
¹ так, я дійсно це роблю