prog.sf 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. #!/usr/bin/ruby
  2. # Even numbers k such that k^2 - 1 is a powerful number.
  3. # https://oeis.org/A365983
  4. # k^2 - 1 = (k-1)*(k+1), therefore both k-1 and k+1 must be odd powerful numbers.
  5. # Known terms:
  6. # 26, 70226, 130576328, 189750626, 512706121226, 13837575261124, 99612037019890, 1385331749802026
  7. func odd_powerful_numbers(a, b, k=2) {
  8. var odd_powerful = []
  9. func (m,r) {
  10. if (r < k) {
  11. odd_powerful << m
  12. return nil
  13. }
  14. var from = 1
  15. var upto = iroot(idiv(b,m), r)
  16. if ((r <= k) && (a > m)) {
  17. from = idiv_ceil(a,m).iroot(r)
  18. }
  19. for j in (from .. upto) {
  20. j.is_even && next
  21. if (r > k) {
  22. j.is_coprime(m) || next
  23. j.is_squarefree || next
  24. }
  25. var t = (m * j**r)
  26. if ((r <= k) && (t < a)) {
  27. next
  28. }
  29. __FUNC__(t, r-1)
  30. }
  31. }(1, 2*k - 1)
  32. odd_powerful.sort
  33. }
  34. var lo = 2
  35. var hi = 2*lo
  36. loop {
  37. say "Sieving range: #{[lo, hi]}"
  38. var arr = odd_powerful_numbers(lo-2, hi+2)
  39. var lookup = arr.to_set
  40. arr.each {|k|
  41. if (lookup.has(k-2)) {
  42. say k.dec
  43. }
  44. }
  45. #arr.each {|v|
  46. # if (is_powerful(v.inc.sqr.dec)) {
  47. # say v.inc
  48. # }
  49. #}
  50. lo = hi+1
  51. hi = 2*lo
  52. }
  53. __END__
  54. Sieving range: [2, 4]
  55. Sieving range: [5, 50]
  56. 26
  57. Sieving range: [51, 510]
  58. Sieving range: [511, 5110]
  59. Sieving range: [5111, 51110]
  60. Sieving range: [51111, 511110]
  61. 70226
  62. Sieving range: [511111, 5111110]
  63. Sieving range: [5111111, 51111110]
  64. Sieving range: [51111111, 511111110]
  65. 130576328
  66. 189750626
  67. Sieving range: [511111111, 5111111110]
  68. Sieving range: [5111111111, 51111111110]
  69. Sieving range: [51111111111, 511111111110]
  70. Sieving range: [511111111111, 5111111111110]
  71. 512706121226
  72. Sieving range: [5111111111111, 51111111111110]