number/
number.rs

1use generator::*;
2
3fn factors(n: u32) -> Generator<'static, (), u32> {
4    Gn::new_scoped(move |mut s| {
5        if n == 0 {
6            return 0;
7        }
8
9        s.yield_with(1);
10
11        for i in 2..n {
12            if n % i == 0 {
13                s.yield_with(i);
14            }
15        }
16        done!();
17    })
18}
19
20fn main() {
21    for i in factors(28) {
22        println!("{i}");
23    }
24
25    (0..10000)
26        .filter(|n| factors(*n).sum::<u32>() == *n)
27        .fold((), |_, n| {
28            println!("n = {n}");
29        })
30}