生成元 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;
    }
}
相关推荐
s_w.h12 小时前
【 linux 】动静态库的制作
linux·运维·服务器·算法·bash
过期动态13 小时前
【LeetCode 热题 100】接雨水
java·数据结构·算法·leetcode·职场和发展
春日见13 小时前
5分钟入门强化学习之动态规划算法与实现
大数据·人工智能·python·算法·机器学习·计算机视觉
bug和崩溃我都要13 小时前
Qt 封装 libmpv 全功能视频播放器开发指南
开发语言·qt·音视频
郝学胜-神的一滴13 小时前
Qt 高级开发 018:复刻经典登录界面布局与窗口美化全解析
开发语言·c++·qt·程序人生·用户界面
scx_link13 小时前
线性回归的总结:
算法·机器学习·线性回归
郝亚军13 小时前
IEEE 754 单精度浮点的SEM表示
开发语言·c++·算法
青山师13 小时前
动态规划算法深度解析:从状态转移方程到工业级优化
数据结构·算法·面试·动态规划·代理模式·java面试
zhangjw3413 小时前
第15篇:Java多线程零基础入门,进程线程、线程创建方式、线程生命周期、线程安全彻底吃透
java·开发语言·面试
蝈理塘(/_\)大怨种13 小时前
类和对象 (上)
java·开发语言