Đôi khi, khi tôi ngớ ngẩn cố gắng tính bất cứ con số nào xuất hiện trước mặt tôi, sau một thời gian tôi nhận ra nó dễ dàng hơn tôi nghĩ. Lấy 2156
ví dụ: cuối cùng tôi nhận ra rằng cả hai 21
và 56
là bội số của 7
, và vì vậy chắc chắn 2156 = 21 x 100 + 56
cũng là bội số của 7
.
Nhiệm vụ của bạn là viết một số mã xác định các số dễ dàng hơn do sự trùng hợp của loại này.
Chính xác hơn:
Viết chương trình hoặc hàm lấy số nguyên dương n
làm đầu vào và trả về giá trị trung thực nếu tồn tại một ước số d
(lớn hơn 1
) sao cho n
có thể chia thành hai để lấy hai số nguyên dương, mỗi số nguyên là bội số của d
; trả về một giá trị giả nếu không.
- "Chặt làm hai" có nghĩa là những gì bạn nghĩ: đại diện cơ sở-10 thông thường được
n
phân vùng tại một số điểm thành một nửa trước và một nửa sau để mang lại hai số nguyên cơ số 10 khác. Không sao nếu số nguyên thứ hai có số 0 đứng đầu (nhưng lưu ý rằng nó phải là số nguyên dương, vì vậy việc chia1230
thành123
và0
không hợp lệ). - Các giá trị trung thực và giả có thể phụ thuộc vào đầu vào. Ví dụ: nếu bất kỳ số nguyên khác nào là trung thực trong ngôn ngữ bạn chọn, thì bạn có thể trả lại số chia
d
hoặc một trong các "phần" củan
(hoặcn
chính nó cho vấn đề đó). - Ví dụ: bất kỳ số chẵn nào có ít nhất hai chữ số trong tập hợp
{2, 4, 6, 8}
sẽ mang lại giá trị trung thực: chỉ cần chia nó sau chữ số chẵn đầu tiên. Ngoài ra, ví dụ, bất kỳ số nguyên tố nàon
cũng sẽ mang lại giá trị giả, cũng như bất kỳ số nào có một chữ số. - Lưu ý rằng nó đủ để xem xét các ước số nguyên tố
d
. - Bạn có thể giả sử đầu vào là hợp lệ (nghĩa là số nguyên dương).
Đây là mã golf , vì vậy mã ngắn nhất tính bằng byte sẽ thắng. Nhưng các giải pháp trong tất cả các ngôn ngữ đều được chào đón, vì vậy chúng tôi có thể phấn đấu cho mã ngắn nhất trong mỗi ngôn ngữ, không chỉ là mã ngắn nhất nói chung.
Các trường hợp thử nghiệm
(Bạn chỉ phải đưa ra một giá trị trung thực hoặc sai lệch; các chú thích bên dưới chỉ bằng cách giải thích.) Một số đầu vào mang lại giá trị trung thực là:
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)
Một số đầu vào mang lại giá trị giả là:
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
Vâng tôi thực sự làm điều này