Narcissistic decimal number: Difference between revisions
(New draft task and Python solution.) |
(Perl 6 entry) |
||
Line 1: | Line 1: | ||
{{draft task}} |
{{draft task}} |
||
A [http://mathworld.wolfram.com/NarcissisticNumber.html Narcissistic decimal number] is a positice decimal number, <math>n</math> in which if there are <math>m</math> digits in the |
A [http://mathworld.wolfram.com/NarcissisticNumber.html Narcissistic decimal number] is a positice decimal number, <math>n</math> in which if there are <math>m</math> digits in the number then the sum of all the individual digits of the number raised to the power <math>m</math> is equal to <math>n</math>. |
||
For example, if <math>n</math> is 153 then <math>m</math>, the number of digits is 3 and we have <math>1^3+5^3+3^3 = 1+125+27 = 153</math> and so 153 is a narcissistic decimal number. |
For example, if <math>n</math> is 153 then <math>m</math>, the number of digits is 3 and we have <math>1^3+5^3+3^3 = 1+125+27 = 153</math> and so 153 is a narcissistic decimal number. |
||
The task is to generate and show here, the first 25 narcissistic numbers. |
The task is to generate and show here, the first 25 narcissistic numbers. |
||
=={{header|Perl6}}== |
|||
Here is a straightforward, naive implementation. Should work but takes ages. |
|||
<lang perl6>sub is-narcissic(Int $n) { $n == ([+] $n.comb)**$n.chars } |
|||
say (grep &is-narcissic, 0 .. *)[^15];</lang> |
|||
=={{header|Python}}== |
=={{header|Python}}== |
Revision as of 23:10, 6 March 2014
A Narcissistic decimal number is a positice decimal number, in which if there are digits in the number then the sum of all the individual digits of the number raised to the power is equal to .
For example, if is 153 then , the number of digits is 3 and we have and so 153 is a narcissistic decimal number.
The task is to generate and show here, the first 25 narcissistic numbers.
Perl6
Here is a straightforward, naive implementation. Should work but takes ages. <lang perl6>sub is-narcissic(Int $n) { $n == ([+] $n.comb)**$n.chars }
say (grep &is-narcissic, 0 .. *)[^15];</lang>
Python
This solution pre-computes the powers once.
<lang python>from __future__ import print_function from itertools import count, islice
def narcissists():
for digits in count(0): digitpowers = [i**digits for i in range(10)] for n in range(int(10**(digits-1)), 10**digits): div, digitpsum = n, 0 while div: div, mod = divmod(div, 10) digitpsum += digitpowers[mod] if n == digitpsum: yield n
for i, n in enumerate(islice(narcissists(), 25), 1):
print(n, end=' ') if i % 5 == 0: print()
print()</lang>
- Output:
0 1 2 3 4 5 6 7 8 9 153 370 371 407 1634 8208 9474 54748 92727 93084 548834 1741725 4210818 9800817 9926315