寻找完美数
1. pub fn is_perfect_number(num: usize) -> bool {
2. let mut sum = 0;
4. for i in 1..num - 1 {
5. if num % i == 0 {
6. sum += i;
7. }
8. }
10. num == sum
11. }
13. pub fn perfect_numbers(max: usize) -> Vec<usize> {
14. let mut result: Vec<usize> = Vec::new();
16. // It is not known if there are any odd perfect numbers, so we go around all the numbers.
17. for i in 1..max + 1 {
18. if is_perfect_number(i) {
19. result.push(i);
20. }
21. }
23. result
24. }
26. #[cfg(test)]
27. mod tests {
28. use super::*;
30. #[test]
31. fn basic() {
32. assert_eq!(is_perfect_number(6), true);
33. assert_eq!(is_perfect_number(28), true);
34. assert_eq!(is_perfect_number(496), true);
35. assert_eq!(is_perfect_number(8128), true);
37. assert_eq!(is_perfect_number(5), false);
38. assert_eq!(is_perfect_number(86), false);
39. assert_eq!(is_perfect_number(497), false);
40. assert_eq!(is_perfect_number(8120), false);
42. assert_eq!(perfect_numbers(10), vec![6]);
43. assert_eq!(perfect_numbers(100), vec![6, 28]);
44. assert_eq!(perfect_numbers(496), vec![6, 28, 496]);
45. assert_eq!(perfect_numbers(1000), vec![6, 28, 496]);
46. }
47. }