Add narcissistic number finder with dynamic programming #13971
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Description
Adds a dynamic programming implementation to find all narcissistic numbers (also known as Armstrong numbers) up to a specified limit.
A narcissistic number is a number that equals the sum of its own digits each raised to the power of the number of digits. For example: 153 = 1³ + 5³ + 3³.
Implementation Details
digit^power)Dynamic Programming Approach
Overlapping Subproblems: Many numbers share the same digits, so the same digit powers are computed repeatedly (e.g., 153, 351, 135 all need 1³, 5³, 3³)
Memoization: Cache stores
(power, digit) -> resultmappings to avoid recomputationOptimal Substructure: The narcissistic property is built from individual digit power results
Examples
Type of Change
Checklist
dynamic_programming/)narcissistic_number.py)ruff checklintingblack(or follows PEP 8)References