Guest User

Untitled

a guest
Jan 8th, 2014
162
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.71 KB | None | 0 0
  1. $ cat primeSieveExample.go
  2. package main
  3.  
  4. import (
  5. "fmt"
  6. "math"
  7. "runtime"
  8. )
  9.  
  10. const target int64 = 60085147
  11.  
  12. // Start up a prime sieve generator
  13. func Generate(ch chan<- int64) {
  14. var i int64
  15. for i = 2; ; i++ {
  16. ch <- i
  17. }
  18. }
  19.  
  20. func Filter(in <-chan int64, out chan<- int64, prime int64) {
  21. for {
  22. i := <-in
  23. if i % prime != 0 {
  24. out <- i
  25. }
  26. }
  27. }
  28.  
  29. func using_goroutines() int {
  30. runtime.GOMAXPROCS(40)
  31.  
  32. var max_factor int64 = 0
  33. var prime int64;
  34. ch := make(chan int64)
  35. max_iter := math.Sqrt(float64(target))
  36.  
  37. go Generate(ch)
  38.  
  39. for float64(prime) < max_iter {
  40. prime = <-ch
  41.  
  42. if target % prime == 0 {
  43. max_factor = prime
  44. }
  45.  
  46. ch1 := make(chan int64)
  47. go Filter(ch, ch1, prime)
  48. ch = ch1
  49. }
  50. fmt.Printf("%d\n", max_factor)
  51. return 0
  52. }
  53.  
  54. func main() {
  55. using_goroutines()
  56. }
  57. $ cat problem3.py
  58. import math
  59.  
  60. #target = 600851475143
  61. target = 60085147
  62.  
  63. def integer_generator():
  64. i = 2
  65. while True:
  66. yield i
  67. i += 1
  68.  
  69. def filter(int_stream, prime):
  70. for i in int_stream:
  71. if i % prime == 0:
  72. continue
  73. yield i
  74.  
  75. def main():
  76. ig = integer_generator()
  77. prime = ig.next()
  78. max_iter = math.sqrt(target)
  79. max_factor = 0
  80.  
  81. while prime < max_iter:
  82. f = filter(ig, prime)
  83. prime = f.next()
  84. ig = f
  85.  
  86. if target % prime == 0 and prime > max_factor:
  87. max_factor = prime
  88.  
  89. print max_factor
  90.  
  91. if __name__ == "__main__":
  92. main()
  93.  
  94. $ go build primeSieveExample.go
  95. $ time ./primeSieveExample
  96. 43
  97.  
  98. real 0m0.064s
  99. user 0m0.188s
  100. sys 0m0.008s
  101. $ time python ./problem3.py
  102. 43
  103.  
  104. real 0m0.103s
  105. user 0m0.093s
  106. sys 0m0.009s
Advertisement
Add Comment
Please, Sign In to add comment