partial_sums_of_exponential_prime_omega_functions.pl 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195
  1. #!/usr/bin/perl
  2. # Daniel "Trizen" Șuteu
  3. # Date: 16 March 2021
  4. # https://github.com/trizen
  5. # Compute partial sums of the following three functions in sublinear time:
  6. # S1(n) = Sum_{k=1..n} v^bigomega(k)
  7. # S2(n) = Sum_{k=1..n} v^omega(k)
  8. # S3(n) = Sum_{k=1..n} v^omega(k) * mu(k)^2
  9. use 5.020;
  10. use warnings;
  11. use ntheory qw(:all);
  12. use experimental qw(signatures);
  13. sub squarefree_almost_prime_count ($k, $n) {
  14. if ($k == 0) {
  15. return (($n <= 0) ? 0 : 1);
  16. }
  17. if ($k == 1) {
  18. return prime_count($n);
  19. }
  20. my $count = 0;
  21. sub ($m, $p, $k, $j = 0) {
  22. my $s = rootint(divint($n, $m), $k);
  23. if ($k == 2) {
  24. foreach my $q (@{primes($p, $s)}) {
  25. ++$j;
  26. if (modint($m, $q) != 0) {
  27. $count += prime_count(divint($n, mulint($m, $q))) - $j;
  28. }
  29. }
  30. return;
  31. }
  32. foreach my $p (@{primes($p, $s)}) {
  33. if (modint($m, $p) != 0) {
  34. __SUB__->(mulint($m, $p), $p, $k - 1, $j);
  35. }
  36. ++$j;
  37. }
  38. }->(1, 2, $k);
  39. return $count;
  40. }
  41. sub S1 ($n, $v = 2) { # Sum_{k=1..n} v^bigomega(k)
  42. vecsum(map { mulint(powint($v, $_), almost_prime_count($_, $n)) } 0 .. logint($n, 2));
  43. }
  44. sub S2 ($n, $v = 2) { # Sum_{k=1..n} v^omega(k)
  45. vecsum(map { mulint(powint($v, $_), omega_prime_count($_, $n)) } 0 .. logint($n, 2));
  46. }
  47. sub S3 ($n, $v = 2) { # Sum_{k=1..n} v^omega(k) * mu(k)^2
  48. vecsum(map { mulint(powint($v, $_), squarefree_almost_prime_count($_, $n)) } 0 .. logint($n, 2));
  49. }
  50. say join ', ', map { S1($_) } 1 .. 20; #=> A069205: [1, 3, 5, 9, 11, 15, 17, 25, 29, 33, 35, 43, 45, 49, 53, 69, 71, 79, 81]
  51. say join ', ', map { S2($_) } 1 .. 20; #=> A064608: [1, 3, 5, 7, 9, 13, 15, 17, 19, 23, 25, 29, 31, 35, 39, 41, 43, 47, 49]
  52. say join ', ', map { S3($_) } 1 .. 20; #=> A069201: [1, 3, 5, 5, 7, 11, 13, 13, 13, 17, 19, 19, 21, 25, 29, 29, 31, 31, 33]
  53. say '';
  54. say join ', ', map { S1($_, -1) } 1 .. 20; #=> A002819: [1, 0, -1, 0, -1, 0, -1, -2, -1, 0, -1, -2, -3, -2, -1, 0, -1, -2, -3, -4]
  55. say join ', ', map { S2($_, -1) } 1 .. 20; #=> A174863: [1, 0, -1, -2, -3, -2, -3, -4, -5, -4, -5, -4, -5, -4, -3, -4, -5, -4, -5, -4]
  56. say join ', ', map { S3($_, -1) } 1 .. 20; #=> A002321: [1, 0, -1, -1, -2, -1, -2, -2, -2, -1, -2, -2, -3, -2, -1, -1, -2, -2, -3, -3]
  57. __END__
  58. # A069205(n) = Sum_{k=1..n} 2^bigomega(k)
  59. A069205(10^1) = 33
  60. A069205(10^2) = 811
  61. A069205(10^3) = 15301
  62. A069205(10^4) = 260615
  63. A069205(10^5) = 3942969
  64. A069205(10^6) = 55282297
  65. A069205(10^7) = 746263855
  66. A069205(10^8) = 9613563919
  67. A069205(10^9) = 120954854741
  68. A069205(10^10) = 1491898574939
  69. A069205(10^11) = 17944730372827
  70. A069205(10^12) = 212986333467973
  71. A069205(10^13) = 2498962573520227
  72. A069205(10^14) = 28874142998632109
  73. # A002819(n) = Sum_{k=1..n} (-1)^bigomega(k)
  74. # See also: A090410
  75. A002819(10^1) = 0
  76. A002819(10^2) = -2
  77. A002819(10^3) = -14
  78. A002819(10^4) = -94
  79. A002819(10^5) = -288
  80. A002819(10^6) = -530
  81. A002819(10^7) = -842
  82. A002819(10^8) = -3884
  83. A002819(10^9) = -25216
  84. A002819(10^10) = -116026
  85. A002819(10^11) = -342224
  86. A002819(10^12) = -522626
  87. A002819(10^13) = -966578
  88. A002819(10^14) = -7424752
  89. # A064608(n) = Sum_{k=1..n} 2^omega(k)
  90. # See also: A180361
  91. A064608(10^1) = 23
  92. A064608(10^2) = 359
  93. A064608(10^3) = 4987
  94. A064608(10^4) = 63869
  95. A064608(10^5) = 778581
  96. A064608(10^6) = 9185685
  97. A064608(10^7) = 105854997
  98. A064608(10^8) = 1198530315
  99. A064608(10^9) = 13385107495
  100. A064608(10^10) = 147849112851
  101. A064608(10^11) = 1618471517571
  102. A064608(10^12) = 17584519050293
  103. # A174863(n) = Sum_{k=1..n} (-1)^omega(k)
  104. A174863(10^1) = -4
  105. A174863(10^2) = 14
  106. A174863(10^3) = 64
  107. A174863(10^4) = -16
  108. A174863(10^5) = -720
  109. A174863(10^6) = -1908
  110. A174863(10^7) = -1650
  111. A174863(10^8) = 10734
  112. A174863(10^9) = 53740
  113. A174863(10^10) = 108654
  114. A174863(10^11) = 195702
  115. A174863(10^12) = 27158
  116. # A069201(n) = Sum_{k=1..n} mu(k)^2 * 2^omega(k)
  117. A069201(10^1) = 17
  118. A069201(10^2) = 211
  119. A069201(10^3) = 2825
  120. A069201(10^4) = 34891
  121. A069201(10^5) = 414813
  122. A069201(10^6) = 4808081
  123. A069201(10^7) = 54684335
  124. A069201(10^8) = 612868643
  125. A069201(10^9) = 6788951097
  126. A069201(10^10) = 74492096539
  127. A069201(10^11) = 810947010335
  128. A069201(10^12) = 8769730440341
  129. # A002321(n) = Sum_{k=1..n} (-1)^omega(k) * mu(k)^2 = Sum_{k=1..n} mu(k)
  130. # See also: A084237
  131. A002321(10^1) = -1
  132. A002321(10^2) = 1
  133. A002321(10^3) = 2
  134. A002321(10^4) = -23
  135. A002321(10^5) = -48
  136. A002321(10^6) = 212
  137. A002321(10^7) = 1037
  138. A002321(10^8) = 1928
  139. A002321(10^9) = -222
  140. A002321(10^10) = -33722
  141. A002321(10^11) = -87856
  142. A002321(10^12) = 62366
  143. # A013928(n) = Sum_{k=1..n} mu(k)^2
  144. # See also: A071172
  145. A013928(10^1) = 7
  146. A013928(10^2) = 61
  147. A013928(10^3) = 608
  148. A013928(10^4) = 6083
  149. A013928(10^5) = 60794
  150. A013928(10^6) = 607926
  151. A013928(10^7) = 6079291
  152. A013928(10^8) = 60792694
  153. A013928(10^9) = 607927124
  154. A013928(10^10) = 6079270942
  155. A013928(10^11) = 60792710280
  156. A013928(10^12) = 607927102274