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}