[R70C] 弱化

  • 难度 入门
  • 时限 1s
  • 空限 512m
  • 构造

思路

关键观察:任意整数 x3x \ge 3 都是弱回文数。取进制 b=x1b = x - 1,则

x=1(x1)+1x = 1 \cdot (x - 1) + 1

xxbb 进制下表示为 (11)b(11)_b,恰好两位且回文。

因此:

  • x=1x = 1x=2x = 2 时,任何进制下都只有一位数字(22 在二进制下为 (10)2(10)_2 不是回文),输出 No
  • x3x \ge 3 时输出 Yes,以及任意一个合法进制 b=x1b = x - 1

复杂度:时间 O(1)O(1),空间 O(1)O(1)

仓颉实现

import std.env.*
import std.convert.*

func solve(reader: ConsoleReader, writer: StringBuilder): Unit {
    let x = Int64.parse(reader.readln().getOrThrow())
    if (x >= 3) {
        writer.append("Yes\n")
        writer.append(x - 1)
        writer.append("\n")
    } else {
        writer.append("No\n")
    }
}

main(): Int64 {
    let reader = getStdIn()
    let t = Int64.parse(reader.readln().getOrThrow())
    let writer = StringBuilder()
    for (_ in 0..t) {
        solve(reader, writer)
    }
    print(writer.toString())
    return 0
}