京东 · 快速幂 · 算法编程题
京东 快速幂 T ≤ 100 时限 1 秒 / 256 MB

题目描述

求当 (1/N) 表示为循环小数时循环节的长度。
循环节的长度是循环小数的重复部分的位数(如果有多种取法,则取最短的)。 注意:可以用有限数表示的数的循环节的长度为 1 。

输入输出

输入描述
输入的第一行为一个正整数 T ,表示测试用例的数量。
随后 T 行,每行给出正整数 N 。
1 ≤ T ≤ 100
2 ≤ N ≤ 10^9
输出描述
输出当 (1/N) 表示为循环小数时循环节的长度。

样例共 1 组

样例 1 · 0.5,0.333333,0.14285714285714.....
输入
3
2
3
7
输出
1
1
6

算法解析依据充分

考点:快速幂 · 数论 · 基础数学

数据规模 T ≤ 100 | 限制 1 秒 / 256MB | 标准输入输出

题目画像

  • 数据规模:T ≤ 100
  • 元素值域:N ≤ 1e9(注意整数类型选择,避免溢出)
  • 复杂度门槛:允许 O(n³) ~ O(n⁴) 的多重循环,可以放心枚举。
  • 源站时限:1 秒(牛客口径,非本题专属门槛)

解题思路

推荐方向:快速幂

把幂运算按二进制拆解,由 O(b) 降到 O(log b)。

思路框架(快速幂 通法 · 非本题专属)

  1. 指数 b 逐位看:为 1 则把当前底数乘进结果。
  2. 每轮底数自乘(平方),指数右移一位。
  3. 所有乘法都在模数下进行。
  4. 矩阵快速幂是同一套路,把乘法换成矩阵乘法,用来加速线性递推。

实现要点:while (b) { if (b&1) res = res*a%mod; a = a*a%mod; b >>= 1; }

复杂度:时间 O(log b) | 空间 O(1)

该范式的通法易错点

  • 指数为 0 时忘了返回 1。
  • 乘法溢出(先取模)。

对照本题

  • 数据规模 T ≤ 100,允许 O(n³) ~ O(n⁴) 的多重循环,可以放心枚举。
  • 元素值域最大到 1e9 —— 求和 / 相乘时记得开 64 位整数。

题目给出的提示

  • 可以用有限数表示的数的循环节的长度为 1

样例解读

样例 1:输入 3 / 2 / 3 / 7 → 输出 1 / 1 / 6

0.5,0.333333,0.14285714285714.....

解析由校招宝本地引擎整理(依据源站考点标签 / 人工判题标注 / 题面规模信号),非官方题解,仅供思路参考。

本题来源:2024年春招-京东-技术通用岗位-第一批笔试。

‹ 上一题 全部编程题 下一题 ›
编程算法题为只读内容:无需作答,直接看题与解析 · 本站不提供在线判题 · 解析由校招宝本地引擎整理,非官方题解