生成元 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;
    }
}
相关推荐
酷爱码1 小时前
如何通过python连接hive,并对里面的表进行增删改查操作
开发语言·hive·python
画个大饼1 小时前
Go语言实战:快速搭建完整的用户认证系统
开发语言·后端·golang
喵先生!2 小时前
C++中的vector和list的区别与适用场景
开发语言·c++
Thomas_YXQ3 小时前
Unity3D Lua集成技术指南
java·开发语言·驱动开发·junit·全文检索·lua·unity3d
xMathematics3 小时前
计算机图形学实践:结合Qt和OpenGL实现绘制彩色三角形
开发语言·c++·qt·计算机图形学·cmake·opengl
ShiinaMashirol3 小时前
代码随想录打卡|Day27(合并区间、单调递增的数字、监控二叉树)
java·算法
yuanManGan5 小时前
C++入门小馆: 深入了解STLlist
开发语言·c++
北极的企鹅885 小时前
XML内容解析成实体类
xml·java·开发语言
BillKu5 小时前
Vue3后代组件多祖先通讯设计方案
开发语言·javascript·ecmascript
Python自动化办公社区5 小时前
Python 3.14:探索新版本的魅力与革新
开发语言·python