生成元 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;
    }
}
相关推荐
金池尽干26 分钟前
基于C语言的基数排序算法
c语言·算法·排序算法
红色石榴30 分钟前
Qt中文乱码解决
开发语言·qt
Htht11131 分钟前
【Qt】实现模拟触摸屏 上下滑动表格 的两种方式
开发语言·qt
A 八方32 分钟前
Python MongoDB
开发语言·python·mongodb
sz66cm2 小时前
Python基础 -- 使用Python实现ssh终端并实现数据处理与统计功能
开发语言·python·ssh
小灰灰爱代码2 小时前
C++——求3*3矩阵对角元素之和。
数据结构·c++·算法
liangbm34 小时前
MATLAB系列02:MATLAB基础
开发语言·数据结构·笔记·matlab·教程·工程基础·高级绘图
change95135 小时前
PHP纯离线搭建(php 8.1.7)
开发语言·php
福鸦5 小时前
详解c++:new和delete
开发语言·c++
qq_172805595 小时前
Go Testify学习与使用
开发语言·golang·go