1234567891011121314151617181920212223242526 |
- #!/usr/bin/ruby
- #
- ## https://rosettacode.org/wiki/Kaprekar_numbers
- #
- var kap = Hash()
- var nt = frequire('ntheory')
- for n in (1..15) {
- var np = (10**n - 1)
- nt.fordivisors({ |d|
- var dp = np//d
- if (gcd(d, dp) == 1) {
- kap{ dp == 1 ? d : d*invmod(d, dp) } := 0 ++
- }
- }, np)
- }
- var nums = kap.keys.map{ Num(_) }.sort
- for n in (6 .. 14) {
- var np = (10**n - 1)
- printf("Kaprekar numbers <= 10^%2d: %5d\n", n, nums.count_by { _ <= np })
- }
|