comb.sf 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. #!/usr/bin/ruby
  2. # Smallest number m such that the GCD of the x's that satisfy sigma(x)=m is n.
  3. # https://oeis.org/A241625
  4. # Known terms:
  5. # 1, 3, 4, 7, 6, 6187272, 8, 15, 13, 196602, 8105688, 28, 14
  6. # Upper-bounds for a(144):
  7. # a(144) <= {5334186182, 320692161764, 404350986572, 724592550812, 921030858722, 1138698021812, 7340065485194, 10562405788532, 405101345685452, 1058995989058904, 1293672253540082, 1991013491138282, 2643933035123354, 15645437418062582}
  8. #var easy = Set( 1, 2, 3, 4, 5, 7, 8, 9, 12, 13, 18, 19, 22, 27, 29, 32, 36, 37, 43, 45, 49, 50, 61, 64, 67, 72, 73, 81, 91, 98, 100, 101, 106, 109, 121, 128, 129, 133, 134, 137, 146, 148, 149, 152, 157, 162, 163, 169, 171, 173, 192, 193, 197, 199, 200, 202, 211, 217, 218, 219)
  9. func a(n, from=1) {
  10. for k in (from .. 1e13) {
  11. say "Testing: #{k}" if (1000 `divides` k)
  12. var t = k.inverse_sigma.gcd
  13. if (t == n) {
  14. return k
  15. }
  16. #if ((t > 13) && (t < 200)) {
  17. #say "a(#{t}) = #{k}" if !easy.has(t)
  18. #return k if ((t == 14) || (t == 15))
  19. #}
  20. }
  21. }
  22. # a(144) <= 921030858722
  23. # a(144) <= 2440369552322
  24. #~ for k in (2..30) {
  25. #~ say "Tesitng: #{k}"
  26. #~ for j in (1..4) {
  27. #~ for i in (1..4){
  28. #~ var n = (2**k * 31**j * 19**i)
  29. #~ if (inverse_sigma(n).gcd == 15) {
  30. #~ die ("Found: ", n)
  31. #~ }
  32. #~ }
  33. #~ }
  34. #~ }
  35. #~ __END__
  36. #var arr = [3, 5, 7, 11, 17, 19, 23, 29, 31, 47, 53, 59, 71, 79, 89, 107, 127, 149, 179, 191, 199, 239, 269]
  37. #var arr = [2, 13, 23, 29, 31, 83, 127, 269, 1153]
  38. #var arr = [2, 3, 5, 7, 13, 17, 19, 97]
  39. #var arr = [2, 3, 5, 7, 11, 17, 31, 71, 127]
  40. var arr = [2, 3, 5, 7, 11, 13, 17, 19, 29, 31, 41, 71, 97, 127, 251, 449, 4801]
  41. for k in (1..30) {
  42. say "Testing: #{k}"
  43. arr.combinations_with_repetition(k, {|*a|
  44. if (a.prod > 1e9) {
  45. if (inverse_sigma(a.prod).gcd ~~ [14,15,144]) {
  46. say (a.prod)
  47. }
  48. }
  49. })
  50. }
  51. #say a(144)
  52. #say a(14,1000341000)
  53. #for k in (6..100) {
  54. # say ("a(#{k}) = ", a(k))
  55. #}
  56. #10000.range.map{.inverse_totient.gcd}.uniq.sort.grep{.is_prime}.say
  57. #~ var table = Hash()
  58. #~ for k in (1..1e4) {
  59. #~ var t = k.inverse_totient.gcd
  60. #~ if (!table.has(t)) {
  61. #~ table{t} = k
  62. #~ }
  63. #~ }
  64. #~ say table.keys.map{.to_i}.sort.map{table{_}}