生成元 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;
    }
}
相关推荐
qq_2546744121 小时前
Alpine Linux 基于 Debian 等系统的常规 Nginx
开发语言
wuweijianlove21 小时前
算法与数据结构协同优化的设计思想的技术7
数据结构·算法
昵称小白21 小时前
二叉树专题(下)
算法·深度优先
故事和你9121 小时前
洛谷-数据结构2-1-二叉堆与树状数组1
开发语言·数据结构·c++·算法·动态规划·图论
挨踢ren21 小时前
C++虚函数:从基础到高阶
java·开发语言·jvm
hhb_61821 小时前
C语言核心技术难点梳理与实战案例解析
c语言·开发语言
海参崴-21 小时前
C++ STL篇 红黑树的模拟实现
开发语言·c++
Dshuishui21 小时前
我用 Claude Code 做了一个学术论文搜索工具
开发语言·人工智能·python·pip·uv
Resky081821 小时前
ReentrantReadWriteLock 深度解析
java·开发语言·juc
多加点辣也没关系21 小时前
数据结构与算法|第十七章:贪心算法
数据结构·算法·贪心算法