1234567891011121314151617181920212223242526272829303132333435363738 |
- #!/usr/bin/ruby
- # Author: Daniel "Trizen" Șuteu
- # Date: 24 August 2016
- # License: GPLv3
- # Website: https://github.com/trizen
- # https://projecteuler.net/problem=134
- # Runtime: 2.189s (previously: 2.855s)
- # k = 10^(1+floor(log10(p1)))
- # g = (invmod(k, p2) * -p1) % p2
- # S = k*g + p1
- var p1 = 5
- var p2 = p1.next_prime
- var sum = 0
- var len = p1.len
- var pow = 10**len
- loop {
- if (p1.len != len) {
- len += 1
- pow *= 10
- }
- sum += (((invmod(pow, p2) * -p1) % p2) * pow + p1)
- p1 = p2
- p2.next_prime!
- p1 > 1000000 && break
- }
- say sum
|