642 Sum of largest prime factors.sf 697 B

1234567891011121314151617181920212223242526272829
  1. #!/usr/bin/ruby
  2. # Author: Trizen
  3. # Date: 16 November 2023
  4. # https://github.com/trizen
  5. # Sum of largest prime factors
  6. # https://projecteuler.net/problem=642
  7. # Let G(n,p) be the number of integers k in 1..n such that gpf(k) = p.
  8. # Equivalently, G(n,p) is the number of p-smooth numbers <= floor(n/p).
  9. # Then we have:
  10. # S(n) = Sum_{k=2..n} gpf(k)
  11. # S(n) = A(n) + B(n)
  12. # where:
  13. # A(n) = Sum_{p <= sqrt(n)} p * G(n,p)
  14. # B(n) = Sum_{k=1..sqrt(n)} W(floor(n/k)) - floor(sqrt(n))*W(floor(sqrt(n)))
  15. # where:
  16. # W(n) = Sum_{p <= n} p.
  17. # Runtime: 48 seconds (when Kim Walisch's `primesum` tool is installed).
  18. local Num!USE_PRIMESUM = true
  19. say (gpf_sum(201820182018) % 1e9) # built-in