Zumkeller numbers: Difference between revisions
Content deleted Content added
→{{header|C++}}: improvements |
→{{header|Ruby}}: add Ruby |
||
Line 4,046: | Line 4,046: | ||
</pre> |
</pre> |
||
=={{header|Ruby}}== |
|||
<lang ruby>class Integer |
|||
def divisors |
|||
res = [1, self] |
|||
(2..Integer.sqrt(self)).each do |n| |
|||
div, mod = divmod(n) |
|||
res << n << div if mod.zero? |
|||
end |
|||
res.uniq.sort |
|||
end |
|||
def zumkeller? |
|||
divs = divisors |
|||
sum = divs.sum |
|||
return false unless sum.even? && sum > self*2 |
|||
half = sum / 2 |
|||
max_combi_size = divs.size / 2 |
|||
1.upto(max_combi_size).any? do |combi_size| |
|||
divs.combination(combi_size).any?{|combi| combi.sum == half} |
|||
end |
|||
end |
|||
end |
|||
def p_enum(enum, cols = 10, col_width = 8) |
|||
enum.each_slice(cols) {|slice| puts "%#{col_width}d"*slice.size % slice} |
|||
end |
|||
puts "#{n=220} Zumkeller numbers:" |
|||
p_enum 1.step.lazy.select(&:zumkeller?).take(n), 14, 6 |
|||
puts "\n#{n=40} odd Zumkeller numbers:" |
|||
p_enum 1.step(by: 2).lazy.select(&:zumkeller?).take(n) |
|||
puts "\n#{n=40} odd Zumkeller numbers not ending with 5:" |
|||
p_enum 1.step(by: 2).lazy.select{|x| x % 5 > 0 && x.zumkeller?}.take(n) |
|||
</lang> |
|||
{{out}} |
|||
<pre>220 Zumkeller numbers: |
|||
12 20 24 30 40 42 48 54 56 60 66 70 78 80 |
|||
84 88 90 96 102 104 108 112 114 120 126 132 138 140 |
|||
150 156 160 168 174 176 180 186 192 198 204 208 210 216 |
|||
220 222 224 228 234 240 246 252 258 260 264 270 272 276 |
|||
280 282 294 300 304 306 308 312 318 320 330 336 340 342 |
|||
348 350 352 354 360 364 366 368 372 378 380 384 390 396 |
|||
402 408 414 416 420 426 432 438 440 444 448 456 460 462 |
|||
464 468 474 476 480 486 490 492 498 500 504 510 516 520 |
|||
522 528 532 534 540 544 546 550 552 558 560 564 570 572 |
|||
580 582 588 594 600 606 608 612 616 618 620 624 630 636 |
|||
640 642 644 650 654 660 666 672 678 680 684 690 696 700 |
|||
702 704 708 714 720 726 728 732 736 740 744 750 756 760 |
|||
762 768 770 780 786 792 798 804 810 812 816 820 822 828 |
|||
832 834 836 840 852 858 860 864 868 870 876 880 888 894 |
|||
896 906 910 912 918 920 924 928 930 936 940 942 945 948 |
|||
952 960 966 972 978 980 984 990 992 996 |
|||
40 odd Zumkeller numbers: |
|||
945 1575 2205 2835 3465 4095 4725 5355 5775 5985 |
|||
6435 6615 6825 7245 7425 7875 8085 8415 8505 8925 |
|||
9135 9555 9765 10395 11655 12285 12705 12915 13545 14175 |
|||
14805 15015 15435 16065 16695 17325 17955 18585 19215 19305 |
|||
40 odd Zumkeller numbers not ending with 5: |
|||
81081 153153 171171 189189 207207 223839 243243 261261 279279 297297 |
|||
351351 459459 513513 567567 621621 671517 729729 742203 783783 793611 |
|||
812889 837837 891891 908523 960687 999999 1024947 1054053 1072071 1073709 |
|||
1095633 1108107 1145529 1162161 1198197 1224531 1270269 1307691 1324323 1378377 |
|||
</pre> |
|||
=={{header|Rust}}== |
=={{header|Rust}}== |
||
<lang rust> |
<lang rust> |