partial_sums_of_squarefree_numbers.sf 654 B

12345678910111213141516171819202122232425262728293031323334
  1. #!/usr/bin/ruby
  2. # Daniel "Trizen" Șuteu
  3. # Date: 01 February 2021
  4. # https://github.com/trizen
  5. # Sub-linear formula for computing the sum of the squarefree numbers <= n.
  6. # See also:
  7. # https://oeis.org/A066779
  8. func squarefree_sum(n) { # A066779
  9. var sum = 0
  10. n.isqrt.each_squarefree {|k|
  11. sum += (moebius(k) * k*k * faulhaber(idiv(n, k*k), 1))
  12. }
  13. return sum
  14. }
  15. for k in (1..9) {
  16. say "S(10^#{k}) = #{squarefree_sum(10**k)}"
  17. }
  18. __END__
  19. S(10^1) = 34
  20. S(10^2) = 2967
  21. S(10^3) = 303076
  22. S(10^4) = 30420034
  23. S(10^5) = 3039711199
  24. S(10^6) = 303961062910
  25. S(10^7) = 30396557311887
  26. S(10^8) = 3039633904822886
  27. S(10^9) = 303963567619632057