12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 |
- #!/usr/bin/ruby
- # Daniel "Trizen" Șuteu
- # Date: 16 August 2019
- # https://github.com/trizen
- # Generate all the divisors d of n, such that d <= k.
- # Aliquot sequence starting at 276.
- # https://oeis.org/A008892
- func divisors_le (n, k) {
- var d = [1]
- var pp = [
- [2,1],
- [3,2],
- [97,1],
- [197,1],
- [75081990941 ,1],
- [88493269493,1]
- [1384830977701,1]
- [12561733388625059,1]
- [1678129073086710180895595636080546136202087961,1]
- [391364384797113642021018938141302575768663239995535008610511080253072850223856047857018826709557247961017887671,1]
- ]
- assert(pp.all{.first.is_prime})
- assert(pp.prod_2d {|p,k| p**k } == n)
- for p,e in (pp) {
- var r = 1
- d << gather {
- e.times {
- r *= p
- d.each { |u|
- take(u*r) if (u*r <= k)
- }
- }
- }...
- }
- d.sort
- }
- var n = 26110157458513265619034078368125391068700794099058184847372911035083675260156495372381837385445470163130669518228029490682124851301249859714720420517651878609243007545569976387750129484086482969920578568241023674
- say divisors_le(n,n-1).sum
|