美文网首页
Rust语言编程实例100题-019

Rust语言编程实例100题-019

作者: L我是小学生 | 来源:发表于2021-07-05 07:35 被阅读0次

    Rust语言编程实例100题-019

    题目:一个数如果恰好等于它的因子之和,这个数就称为"完数"。例如6=1+2+3.编程找出1000以内的所有完数。

    程序分析:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成:

    • 如果这个质数恰等于(小于的时候,继续执行循环)n,则说明分解质因数的过程已经结束,另外 打印出即可。
    • 但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数n.重复执行第二步。
    • 如果n不能被k整除,则用k+1作为k的值,重复执行第一步。

    输出格式:每个数占一行。例如:6 = 1 + 2 + 3

    知识点:循环

    fn main() {
        const N: i32 = 1000;
    
        // 求2 - 1000以内的因数
        for i in 2..=N {
            // i 的 因数和
            let mut sum = 1;
            // 记录并存放因子
            let mut array: Vec<i32> = Vec::new();
            // 每个数的第一个因子一定是1
            array.push(1);
    
            // 求 i 的质因数
            for j in 2..=i/2 {
                if i % j == 0 {
                    // 说明 j 是一个因子
                    sum += j;
                    array.push(j);
                }
            }
    
            // 判断 sum 和 i 的值是否相等
            if i == sum {
                // 相等则打印 因子array数组
                print!("{} = ", i);
                let result: Vec<String> = array.iter().map(|x| x.to_string()).collect();
                println!("{}", result.join(" + "));
            }
        }
    }
    

    程序执行结果:

    6 = 1 + 2 + 3
    28 = 1 + 2 + 4 + 7 + 14
    496 = 1 + 2 + 4 + 8 + 16 + 31 + 62 + 124 + 248
    
    Process finished with exit code 0
    

    相关文章

      网友评论

          本文标题:Rust语言编程实例100题-019

          本文链接:https://www.haomeiwen.com/subject/eqdbultx.html