Advertisement
Guest User

Untitled

a guest
Mar 24th, 2019
46
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.11 KB | None | 0 0
  1. use std::collections::HashMap;
  2.  
  3. struct Sieve {
  4. composites: HashMap<u64, Vec<u64>>,
  5. x: u64,
  6. }
  7.  
  8. impl Sieve {
  9. fn new() -> Sieve {
  10. Sieve {
  11. composites: HashMap::new(),
  12. x: 2,
  13. }
  14. }
  15. }
  16.  
  17. impl Iterator for Sieve {
  18. type Item = u64;
  19.  
  20. fn next(&mut self) -> Option<u64> {
  21. let x = self.x;
  22. self.x = self.x + 1;
  23. match self.composites.get(&x) {
  24. Some(numbers) => {
  25. for _num in numbers.to_owned() {
  26. self.composites
  27. .entry(x + _num)
  28. .and_modify(|v| v.push(_num))
  29. .or_insert(vec![_num]);
  30. }
  31. self.composites.remove(&x);
  32. self.next()
  33. }
  34. None => {
  35. self.composites.insert(x * x, vec![x]);
  36. return Some(x);
  37. }
  38. }
  39. }
  40. }
  41.  
  42. fn main() {
  43. let mut sieve = Sieve::new();
  44.  
  45. println!("{:?}", sieve.next()); // 2
  46. println!("{:?}", sieve.next()); // 3
  47. println!("{:?}", sieve.next()); // 5
  48. println!("{:?}", sieve.next()); // 7
  49. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement