Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- use std::collections::HashMap;
- struct Sieve {
- composites: HashMap<u64, Vec<u64>>,
- x: u64,
- }
- impl Sieve {
- fn new() -> Sieve {
- Sieve {
- composites: HashMap::new(),
- x: 2,
- }
- }
- }
- impl Iterator for Sieve {
- type Item = u64;
- fn next(&mut self) -> Option<u64> {
- let x = self.x;
- self.x = self.x + 1;
- match self.composites.get(&x) {
- Some(numbers) => {
- for _num in numbers.to_owned() {
- self.composites
- .entry(x + _num)
- .and_modify(|v| v.push(_num))
- .or_insert(vec![_num]);
- }
- self.composites.remove(&x);
- self.next()
- }
- None => {
- self.composites.insert(x * x, vec![x]);
- return Some(x);
- }
- }
- }
- }
- fn main() {
- let mut sieve = Sieve::new();
- println!("{:?}", sieve.next()); // 2
- println!("{:?}", sieve.next()); // 3
- println!("{:?}", sieve.next()); // 5
- println!("{:?}", sieve.next()); // 7
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement