生成元 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;
    }
}
相关推荐
ccLianLian18 分钟前
计算机视觉·TagCLIP
人工智能·算法
国服第二切图仔19 分钟前
Rust开发实战之简单游戏开发(piston游戏引擎)
开发语言·rust·游戏引擎
千弥霜24 分钟前
codeforces1997(div.3)E F
算法
ii_best26 分钟前
安卓/IOS工具开发基础教程:按键精灵一个简单的文字识别游戏验证
android·开发语言·游戏·ios·编辑器
草莓熊Lotso29 分钟前
C++ 继承特殊场景解析:友元、静态成员与菱形继承的底层逻辑
服务器·开发语言·c++·人工智能·经验分享·笔记·1024程序员节
诗句藏于尽头32 分钟前
电脑使用软件控制本机屏和外接屏失效问题及解决
开发语言
不是株39 分钟前
JavaWeb(后端进阶)
java·开发语言·后端
利刃大大1 小时前
【动态规划:01背包】01背包详解 && 模板题 && 优化
c++·算法·动态规划·力扣·背包问题
im_AMBER1 小时前
算法笔记 10
笔记·学习·算法·leetcode
workflower1 小时前
FDD与其他方法的相似和区别
数据库·算法·需求分析·个人开发