2026年3月GESP真题及题解(C++五级):有限不循环小数

2026年3月GESP真题及题解(C++五级):有限不循环小数

题目描述

若 1 a \frac{1}{a} a1 可化为一个有限的,不循环的小数,则称 a a a 为终止数

请你求出在 L L L 到 R R R 中终止数的数量。

输入格式

输入一行,包含两个整数 L , R L,R L,R。

输出格式

输出一行,包含一个整数,表示 L L L 到 R R R 中终止数的数量。

输入输出样例 1
输入 1
复制代码
2 11
输出 1
复制代码
5
说明/提示
样例解释

在 [ 2 , 11 ] [2,11] [2,11] 终止数有 2 2 2、 4 4 4、 5 5 5、 8 8 8、 10 10 10。

数据范围

保证 1 ≤ L ≤ R ≤ 10 6 1 \le L \le R \le 10^6 1≤L≤R≤106。

思路分析

题目分析:

题目要求统计区间 [L, R] 内有多少个整数 a 使得 1 a \frac{1}{a} a1 是有限不循环小数。根据数学知识,一个最简分数化为有限小数的条件是分母的质因数只包含 2 和 5。由于 1 a \frac{1}{a} a1 已是最简形式,所以 a 必须能写成 2 i × 5 j 2^i \times 5^j 2i×5j 的形式,其中 (i, j) 是非负整数。

算法思路:

采用两层循环枚举所有可能的 2 i × 5 j 2^i \times 5^j 2i×5j 值,且保证不超过 R:

  • 外层循环枚举 2 的幂 i(从 1 开始,每次乘 2),代表 2 i 2^i 2i。
  • 内层循环枚举以当前 i 为基数,不断乘以 5,得到 i × 5 j i \times 5^j i×5j,即 2 i × 5 j 2^i \times 5^j 2i×5j。
  • 每次生成一个数时,判断是否大于等于 L,若是则计数。

代码实现

cpp 复制代码
#include <bits/stdc++.h>
using namespace std;

int l, r, cnt = 0;  // l, r为区间端点,cnt统计终止数的个数

int main() {
    cin >> l >> r;  // 输入区间

    // 外层循环:枚举2的幂次,i = 2^0, 2^1, 2^2, ... 直到超过r
    for (int i = 1; i <= r; i *= 2) {
        // 内层循环:以当前i为基数,不断乘以5,得到 i*5^0, i*5^1, ... 直到超过r
        for (int j = i; j <= r; j *= 5) {
            if (j >= l) {  // 如果该数在区间内,则计数
                cnt++;
            }
        }
    }

    cout << cnt;  // 输出结果
    return 0;
}

功能分析

样例分析:

以样例输入 2 11 为例,程序生成的数依次为:

  • (i=1): 1 (小于 L 不计数), 5 (计数), 25 (大于 R 停止)
  • (i=2): 2 (计数), 10 (计数), 50 (停止)
  • (i=4): 4 (计数), 20 (停止)
  • (i=8): 8 (计数), 40 (停止)
  • (i=16): 大于 R,外层循环结束

最终计数得到 {5,2,10,4,8} 共 5 个数,输出 5,与题目样例一致。

时间复杂度:
  • 时间复杂度约为 O ( log ⁡ 2 R ⋅ log ⁡ 5 R ) O(\log_2 R \cdot \log_5 R) O(log2R⋅log5R),对于 R ≤ 10 6 R \leq 10^6 R≤106 完全可行(循环次数极少)

各种学习资料,助力大家一站式学习和提升!!!

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
int main(){
	cout<<"##########  一站式掌握信奥赛知识!  ##########";
	cout<<"#############  冲刺信奥赛拿奖!  #############";
	cout<<"######  课程购买后永久学习,不受限制!   ######";
	return 0;
}

【秘籍汇总】(完整csp信奥赛C++学习资料):

1、csp/信奥赛C++,完整信奥赛系列课程(永久学习):

https://edu.csdn.net/lecturer/7901 点击跳转

2、CSP信奥赛C++竞赛拿奖视频课:

https://edu.csdn.net/course/detail/40437 点击跳转

3、csp信奥赛高频考点知识详解及案例实践:

CSP信奥赛C++动态规划:
https://blog.csdn.net/weixin_66461496/category_13096895.html点击跳转

CSP信奥赛C++标准模板库STL:
https://blog.csdn.net/weixin_66461496/category_13108077.html 点击跳转

信奥赛C++提高组csp-s知识详解及案例实践:
https://blog.csdn.net/weixin_66461496/category_13113932.html 点击跳转

4、csp信奥赛冲刺一等奖有效刷题题解:

CSP信奥赛C++初赛及复赛高频考点真题解析(持续更新):
https://blog.csdn.net/weixin_66461496/category_12808781.html 点击跳转

信奥赛C++提高组csp-s初赛&复赛真题题解(持续更新):
https://blog.csdn.net/weixin_66461496/category_13125089.html 点击跳转

5、GESP C++考级真题题解:

GESP(C++ 一级+二级+三级)真题题解(持续更新):https://blog.csdn.net/weixin_66461496/category_12858102.html 点击跳转

GESP(C++ 四级+五级+六级)真题题解(持续更新):https://blog.csdn.net/weixin_66461496/category_12869848.html 点击跳转

GESP(C++ 七级+八级)真题题解(持续更新):
https://blog.csdn.net/weixin_66461496/category_13117178.html 点击跳转

· 文末祝福 ·

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
int main(){
	cout<<"跟着王老师一起学习信奥赛C++";
	cout<<"    成就更好的自己!       ";
	cout<<"  csp信奥赛一等奖属于你!   ";
	return 0;
}
相关推荐
智者知已应修善业1 小时前
【51单片机不用数组动态数码管显示字符和LED流水灯】2023-10-3
c++·经验分享·笔记·算法·51单片机
AI进化营-智能译站2 小时前
ROS2 C++开发系列16-智能指针管理传感器句柄|告别ROS2节点内存泄漏与野指针
java·c++·算法·ai
报错小能手2 小时前
好好讲讲移动构造 移动赋值
c++
syker2 小时前
AIFerric深度学习框架:自研全栈AI基础设施的技术全景
开发语言·c++
xvhao20133 小时前
单源、多源最短路
数据结构·c++·算法·深度优先·动态规划·图论·图搜索算法
笑鸿的学习笔记4 小时前
qt-C++语法笔记之Qt Graphics View 框架中的类型辨析完全指南
c++·笔记·qt
山居秋暝LS4 小时前
安装C++版opencv和opencv_contrib
开发语言·c++·opencv
谭欣辰5 小时前
LCS(最长公共子序列)详解
开发语言·c++·算法
Cando学算法5 小时前
鸽笼原理(抽屉原理)
c++·算法·学习方法
Tisfy5 小时前
LeetCode 0796.旋转字符串:暴力模拟
算法·leetcode·题解·模拟·字符串匹配