187 Semiprimes.sf 696 B

123456789101112131415161718192021222324252627282930313233343536373839
  1. #!/usr/bin/ruby
  2. # How many composite integers, n < 10^8, have precisely two, not necessarily distinct, prime factors?
  3. # https://projecteuler.net/problem=187
  4. # Runtime: 0.313s
  5. func semiprime_count_1(n) {
  6. var t = 0
  7. n.isqrt.primes.sum {|p|
  8. prime_count(idiv(n,p)) - ++t + 1
  9. }
  10. }
  11. func semiprime_count_2(n) {
  12. n.isqrt.primes.sum {|p|
  13. prime_count(p, idiv(n,p))
  14. }
  15. }
  16. func semiprime_count_3(n) {
  17. var t = 2*n.isqrt.primes.sum {|p|
  18. prime_count(idiv(n,p))
  19. }
  20. var r = prime_count(n.isqrt)
  21. (t + r - r**2)/2
  22. }
  23. var n = (10**8 - 1)
  24. say semiprime_count(n) # built-in
  25. say semiprime_count_1(n)
  26. say semiprime_count_2(n)
  27. say semiprime_count_3(n)