sum_of_sigma_2.pl 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. #!/usr/bin/perl
  2. # Daniel "Trizen" Șuteu
  3. # Date: 10 January 2018
  4. # https://github.com/trizen
  5. # Sum of the sigma_2(k) function, for 1 <= k <= n, where `sigma_2(k)` is `Sum_{d|k} d^2`.
  6. # See also:
  7. # https://oeis.org/A188138
  8. use 5.010;
  9. use strict;
  10. use warnings;
  11. use Math::AnyNum qw(isqrt faulhaber_sum);
  12. sub partial_sum_of_sigma2 { # O(sqrt(n)) complexity
  13. my ($n) = @_;
  14. my $s = isqrt($n);
  15. my $u = int($n / ($s + 1));
  16. my $sum = 0;
  17. my $prev = faulhaber_sum($n, 2);
  18. foreach my $k (1 .. $s) {
  19. my $curr = faulhaber_sum(int($n / ($k + 1)), 2);
  20. $sum += $k * ($prev - $curr);
  21. $prev = $curr;
  22. }
  23. foreach my $k (1 .. $u) {
  24. $sum += $k * $k * int($n / $k);
  25. }
  26. return $sum;
  27. }
  28. foreach my $k (0 .. 9) {
  29. say "a(10^$k) = ", partial_sum_of_sigma2(10**$k);
  30. }
  31. __END__
  32. a(10^0) = 1
  33. a(10^1) = 469
  34. a(10^2) = 407819
  35. a(10^3) = 401382971
  36. a(10^4) = 400757638164
  37. a(10^5) = 400692683389101
  38. a(10^6) = 400686363385965077
  39. a(10^7) = 400685705322499946270
  40. a(10^8) = 400685641565621401132515
  41. a(10^9) = 400685635084923815073475174