Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- $ cat primeSieveExample.go
- package main
- import (
- "fmt"
- "math"
- "runtime"
- )
- const target int64 = 60085147
- // Start up a prime sieve generator
- func Generate(ch chan<- int64) {
- var i int64
- for i = 2; ; i++ {
- ch <- i
- }
- }
- func Filter(in <-chan int64, out chan<- int64, prime int64) {
- for {
- i := <-in
- if i % prime != 0 {
- out <- i
- }
- }
- }
- func using_goroutines() int {
- runtime.GOMAXPROCS(40)
- var max_factor int64 = 0
- var prime int64;
- ch := make(chan int64)
- max_iter := math.Sqrt(float64(target))
- go Generate(ch)
- for float64(prime) < max_iter {
- prime = <-ch
- if target % prime == 0 {
- max_factor = prime
- }
- ch1 := make(chan int64)
- go Filter(ch, ch1, prime)
- ch = ch1
- }
- fmt.Printf("%d\n", max_factor)
- return 0
- }
- func main() {
- using_goroutines()
- }
- $ cat problem3.py
- import math
- #target = 600851475143
- target = 60085147
- def integer_generator():
- i = 2
- while True:
- yield i
- i += 1
- def filter(int_stream, prime):
- for i in int_stream:
- if i % prime == 0:
- continue
- yield i
- def main():
- ig = integer_generator()
- prime = ig.next()
- max_iter = math.sqrt(target)
- max_factor = 0
- while prime < max_iter:
- f = filter(ig, prime)
- prime = f.next()
- ig = f
- if target % prime == 0 and prime > max_factor:
- max_factor = prime
- print max_factor
- if __name__ == "__main__":
- main()
- $ go build primeSieveExample.go
- $ time ./primeSieveExample
- 43
- real 0m0.064s
- user 0m0.188s
- sys 0m0.008s
- $ time python ./problem3.py
- 43
- real 0m0.103s
- user 0m0.093s
- sys 0m0.009s
Advertisement
Add Comment
Please, Sign In to add comment