Uh oh!
There was an error while loading. Please reload this page.
Add Kaprekar number checker to special_numbers - #12723
Conversation
mindaugl
left a comment
There was a problem hiding this comment.
Shouldn't 10 be a Kaprekar number, since 10^2 = 100, and "100" = "10" + "0" gives 10?
Sean-Randall
commented
May 11, 2025
10 is Disallowed, see above. |
mindaugl
commented
May 12, 2025
Thanks for the link. Then, the definition should be clarified in the code function description to be: "Kaprekar numbers: positive numbers n such that n = q+r and n^2 = q*10^m+r, for some m >= 1, q >= 0 and 0 <= r < 10^m, with n != 10^a, a >= 1." (https://oeis.org/A006886)? |
Sean-Randall
commented
May 12, 2025
Updated the function to align with the strict definition of Kaprekar numbers per OEIS A006886 and Iannucci (1997). Powers of 10 are now explicitly excluded. Let me know if there's anything else to improve! |
| square = str(n**2) | ||
| for i in range(1, len(square)): | ||
| left, right = square[:i], square[i:] | ||
| if int(right) == 0: |
There was a problem hiding this comment.
It seems this check is not needed anymore.
mindaugl
left a comment
There was a problem hiding this comment.
Just added a comment in code, as the check for int(right) == 0 seems not to be necessary any more after adding explicit check for powers of 10.
Sean-Randall
commented
May 13, 2025
Thanks! I removed the int(right) == 0 check as suggested. The new logic excludes powers of 10 directly. Let me know if anything else needs a tweak. |
There was a problem hiding this comment.
Click here to look at the relevant links ⬇️
🔗 Relevant Links
Repository:
Python:
Automated review generated by algorithms-keeper. If there's any problem regarding this review, please open an issue about it.
algorithms-keeper commands and options
algorithms-keeper actions can be triggered by commenting on this PR:
@algorithms-keeper reviewto trigger the checks for only added pull request files@algorithms-keeper review-allto trigger the checks for all the pull request files, including the modified files. As we cannot post review comments on lines not part of the diff, this command will post all the messages in one comment.NOTE: Commands are in beta and so this feature is restricted only to a member or owner of the organization.
| import math | ||
| def is_kaprekar_number(n: int) -> bool: |
There was a problem hiding this comment.
Please provide descriptive name for the parameter: n
Sean-Randall
commented
May 13, 2025
All checks are now passing, including tests, Ruff style checks, and namespace packaging. The implementation follows the strict Kaprekar definition and excludes powers of 10 as required. Everything should be ready for merge. Thanks again for the helpful feedback! |
cclauss
commented
Sep 5, 2026
@priya-sundaram-dev This algorithm is the first Kaprekar PR, and it has pytests instead of doctests (which is OK with me as long as they pass in CI). Is this or one of the four below the best implementation that we should merge? |
priya-sundaram-dev
commented
Sep 5, 2026
Thanks for the ping, @cclauss. I read all five and verified the two strongest against OEIS A006886 (canonical Kaprekar numbers ≤ 10000 — both reproduce the sequence exactly, no extras/misses). One clarification first: #13862 is a different algorithm — it's Kaprekar's constant (the 6174 routine), not the Kaprekar-number predicate. It's not really a duplicate of the other four and could stand on its own merits separately. That leaves four true
So: I'd merge #14562 for the checker, and consider #13862 separately as the distinct 6174-routine algorithm. Kudos to everyone — this was a close call between #14562 and #14563. |
This PR adds a new function
is_kaprekar_number(n)undermaths/special_numbers/.The function determines whether a number is a Kaprekar number based on digit-splitting logic, where the square of a number is divided into two parts that sum to the original number. It includes inline doctests to demonstrate usage and ensure correctness.
✔️ This contribution follows all repository contribution guidelines:
n: int -> bool)doctest.testmod()🎯 Educational Value:
This function enhances the repository's coverage of special number classifications and provides a clean, beginner-friendly example of digit-based number theory in Python.
Tested and ready for review. Thank you for maintaining this valuable resource!