生成元 rust解法

如果x加上x的各个数字之和得到y,就说x是y的生成元。给出n(1≤n≤100000),求n的最小生成元。无解输出0。例如,n=216,121,2005时的解分别为198,0,1979。

【分析】

本题看起来是个数学题,实则不然。假设所求生成元为m。不难发现m<n。换句话说,只需枚举所有的m<n,看看有没有哪个数是n的生成元。

可惜这样做的效率并不高,因为每次计算一个n的生成元都需要枚举n-1个数。

更快的方法是一次性枚举100000内的所有正整数x,求出对应的y,x是y的最小生成元,最后查表即可。

解法:

rust 复制代码
use std::io;
fn main() {
    let mut ans = vec![0; 100000 + 50];
    for i in 1..=100000 {
        let mut x = i;
        let mut y = i;
        while x > 0 {
            y += x % 10;
            x /= 10;
        }
        if ans[y] == 0 || i < ans[y] {
            ans[y] = i;
        }
    }
    let mut buf = String::new();
    io::stdin().read_line(&mut buf).unwrap();
    let mut cnt: usize = buf.trim().parse().unwrap();
    while cnt > 0 {
        let mut buf = String::new();
        io::stdin().read_line(&mut buf).unwrap();
        let y: usize = buf.trim().parse().unwrap();
        println!("{}", ans[y]);
        cnt -= 1;
    }
}
相关推荐
松涛和鸣2 分钟前
从零开始理解 C 语言函数指针与回调机制
linux·c语言·开发语言·嵌入式硬件·排序算法
2***B44920 分钟前
Rust在系统编程中的内存安全
开发语言·后端·rust
U***e6326 分钟前
Rust错误处理最佳实践
开发语言·后端·rust
习习.y32 分钟前
python笔记梳理以及一些题目整理
开发语言·笔记·python
qq_386218991 小时前
Gemini生成的自动搜索和下载论文的python脚本
开发语言·python
o***Z4482 小时前
JavaScript在Node.js中的内存管理
开发语言·javascript·node.js
毕设源码-邱学长2 小时前
【开题答辩全过程】以 基于Java企业人事工资管理系统为例,包含答辩的问题和答案
java·开发语言
稚辉君.MCA_P8_Java2 小时前
Gemini永久会员 Java中的四边形不等式优化
java·后端·算法
稚辉君.MCA_P8_Java2 小时前
通义 插入排序(Insertion Sort)
数据结构·后端·算法·架构·排序算法
颜*鸣&空3 小时前
QT程序实现串口通信案例
开发语言·qt