count_of_squarefree_numbers.sf 578 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 counting the number of squarefree numbers <= n.
  6. # See also:
  7. # https://oeis.org/A013928
  8. func squarefree_count(n) {
  9. var sum = 0
  10. n.isqrt.each_squarefree {|k|
  11. sum += (moebius(k) * idiv(n, k*k))
  12. }
  13. return sum
  14. }
  15. for k in (1..9) {
  16. say "S(10^#{k}) = #{squarefree_count(10**k)}"
  17. }
  18. __END__
  19. S(10^1) = 7
  20. S(10^2) = 61
  21. S(10^3) = 608
  22. S(10^4) = 6083
  23. S(10^5) = 60794
  24. S(10^6) = 607926
  25. S(10^7) = 6079291
  26. S(10^8) = 60792694
  27. S(10^9) = 607927124