prog.sf 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. #!/usr/bin/ruby
  2. # b(2^n - 1) = 0, for all n >= 1.
  3. # Number of 0's minus number of 1's among the edge truncated binary representations of the first n natural numbers.
  4. # By "edge truncated" we mean removing the first and last binary digits.
  5. # See also:
  6. # https://oeis.org/A308430 (same process on primes)
  7. func b(n) is cached {
  8. return 0 if (n == 0)
  9. return 0 if (n == 1)
  10. var t = n.as_bin.chars.slice(1, -1)
  11. b(n-1) + (t.count('0') - t.count('1'))
  12. }
  13. say 128.of(b)
  14. __END__
  15. [0, 0, 0, 0, 1, 2, 1, 0, 2, 4, 4, 4, 4, 4, 2, 0, 3, 6, 7, 8, 9, 10, 9, 8, 9, 10, 9, 8, 7, 6, 3, 0, 4, 8, 10, 12, 14, 16, 16, 16, 18, 20, 20, 20, 20, 20, 18, 16, 18, 20, 20, 20, 20, 20, 18, 16, 16, 16, 14, 12, 10, 8, 4, 0, 5, 10, 13, 16, 19, 22, 23, 24, 27, 30, 31, 32, 33, 34, 33, 32, 35, 38, 39, 40, 41, 42, 41, 40, 41, 42, 41, 40, 39, 38, 35, 32, 35, 38, 39, 40, 41, 42, 41, 40, 41, 42, 41, 40, 39, 38, 35, 32, 33, 34, 33, 32, 31, 30, 27, 24, 23, 22, 19, 16, 13, 10, 5, 0]
  16. for k in (1 .. (2**(ilog2(1e4)))) {
  17. say b(k)
  18. }
  19. for k in (1..1e7) {
  20. if (b(k) <= 0) {
  21. say [k, factor_exp(k+1)]
  22. }
  23. }
  24. __END__
  25. #say 101.of{|n| b(n+1) }
  26. for n in (1..10000) {
  27. say b(n)
  28. }
  29. __END__
  30. #~ say b(2**1 - 1)
  31. #~ say b(2**2 - 1)
  32. #~ say b(2**3 - 1)
  33. #~ say b(2**4 - 1)
  34. #~ say b(2**5 - 1)
  35. #~ say b(2**6 - 1)
  36. #~ __END__
  37. #~ __END__
  38. for k in (1..1e5) {
  39. if (b(k) == 0) {
  40. say [k, factor_exp(k+1)]
  41. }
  42. }
  43. __END__
  44. func A070939(n) {
  45. n.as_bin.len
  46. }
  47. func A000120(n) {
  48. n.popcount
  49. }
  50. func b(n) is cached {
  51. return 0 if (n == 1)
  52. b(n-1) + (A070939(n) - 2*A000120(n) + 2)
  53. }
  54. #say 101.of(b)
  55. for k in (1..1000) {
  56. say b(k)
  57. }
  58. #b(n) = Sum_{k=2..n} (A070939(k) - 2*A000120(k) + 2).
  59. #a(n) = Sum_{k=2..n} (A035100(k) - 2*A014499(k) + 2) = Sum_{k=2..n} (A070939(A000040(k)) - 2*A000120(A000040(k)) + 2). - ~~~~
  60. __END__
  61. func g(n) {
  62. var t = n.as_bin.chars.slice(1, -1)
  63. t.count('0') - t.count('1')
  64. }
  65. #say 20.of(g)
  66. for k in (1..10) {
  67. say [g(k.prime), k]
  68. }
  69. __END__
  70. func f(n) is cached {
  71. n == 0 && return 0
  72. #n == && return 0
  73. #var t = n.as_bin.chars.slice(1, -1)
  74. #f(n-1) + t.count('0') - t.count('1')
  75. f(n-1) + g(n.prime)
  76. #f(n-1) + (1+ilog2(prime(n))) - 2*popcount(prime(n)) + 2
  77. }
  78. say 200.of(f)
  79. __END__
  80. #say f(16381.primepi)
  81. #say (1..20 -> grep{2**_ -1 -> is_prime }.each{say f(primepi(2**_ - 1)) })
  82. #__END__
  83. #say 40.of(f)
  84. for k in (1..1e4) {
  85. #say f(k)
  86. if (f(k) == 0) {
  87. say [k, f(k)]
  88. }
  89. # say k.prime
  90. # }
  91. }