Achilles numbers: Difference between revisions
Content added Content deleted
m (Formatting error corrected.) |
(→{{header|Ruby}}: Add Ruby) |
||
Line 2,914: | Line 2,914: | ||
</pre> |
</pre> |
||
First 50 Achilles numbers found in 53 seconds on the ''iHP48'' emulator running on a iPhone Xr; first 20 strong Achilles numbers found in 5 minutes 13 seconds on the same platform. |
First 50 Achilles numbers found in 53 seconds on the ''iHP48'' emulator running on a iPhone Xr; first 20 strong Achilles numbers found in 5 minutes 13 seconds on the same platform. |
||
=={{header|Ruby}}== |
|||
<syntaxhighlight lang="ruby">require 'prime' |
|||
def achilles?(n) |
|||
exponents = n.prime_division.map(&:last) |
|||
exponents.none?(1) && exponents.inject(&:gcd) == 1 |
|||
end |
|||
def 𝜑(n) |
|||
n.prime_division.inject(1) {|res, (pr, exp)| res *= (pr-1) * pr**(exp-1) } |
|||
end |
|||
achilleses = (2..).lazy.select{|n| achilles?(n) } |
|||
n = 50 |
|||
puts "First #{n} Achilles numbers:" |
|||
achilleses.first(n).each_slice(10){|s| puts "%9d"*s.size % s} |
|||
puts "\nFirst #{n} strong Achilles numbers:" |
|||
achilleses.select{|ach| achilles?(𝜑(ach)) }.first(n).each_slice(10){|s| puts "%9d"*s.size % s} |
|||
puts |
|||
counts = achilleses.take_while{|ach| ach < 1000000}.map{|a| a.digits.size}.tally |
|||
counts.each{|k ,v| puts "#{k} digits: #{v}" } |
|||
</syntaxhighlight> |
|||
{{out}} |
|||
<pre>First 50 Achilles numbers: |
|||
72 108 200 288 392 432 500 648 675 800 |
|||
864 968 972 1125 1152 1323 1352 1372 1568 1800 |
|||
1944 2000 2312 2592 2700 2888 3087 3200 3267 3456 |
|||
3528 3872 3888 4000 4232 4500 4563 4608 5000 5292 |
|||
5324 5400 5408 5488 6075 6125 6272 6728 6912 7200 |
|||
First 50 strong Achilles numbers: |
|||
500 864 1944 2000 2592 3456 5000 10125 10368 12348 |
|||
12500 16875 19652 19773 30375 31104 32000 33275 37044 40500 |
|||
49392 50000 52488 55296 61731 64827 67500 69984 78608 80000 |
|||
81000 83349 84375 93312 108000 111132 124416 128000 135000 148176 |
|||
151875 158184 162000 165888 172872 177957 197568 200000 202612 209952 |
|||
2 digits: 1 |
|||
3 digits: 12 |
|||
4 digits: 47 |
|||
5 digits: 192 |
|||
6 digits: 664 |
|||
</pre> |
|||
=={{header|Rust}}== |
=={{header|Rust}}== |