[GESP202603 五级] 有限不循环小数题解

前言

蒟蒻的第一篇正经markdown题解
非常经典的一道数学题,只需要知道公式即可轻松解决


题目大意

输入\(m,n\),输出\(m,n\)中所有“终止数,什么是“终止数”,若\(\frac{1}{a}\)能化成有限不循环小数,那么称a为终止数

思路

我们首先需要知道如何判断“终止数”,结论:若\(a = 2 ^ n + 5 ^ n\)那么\(a\)为终止数


证明 这里提供两种证明方式

1.若 \(a = 2^m \cdot 5^n\),则 \(\dfrac{1}{a}\) 是有限小数

因为 \(a = 2^m \cdot 5^n\),取 \(k = \max(m, n)\),则有:

\[\frac{1}{a} = \frac{1}{2^m \cdot 5^n} = \frac{2^{k-m} \cdot 5^{k-n}}{2^k \cdot 5^k} = \frac{2^{k-m} \cdot 5^{k-n}}{10^k} \]

此时分子为整数,分母为 \(10^k\),因此该分数可写为小数点后 \(k\) 位的有限小数(末尾可能有多余的零)。

(若 \(\dfrac{1}{a}\) 是有限小数,则 \(a = 2^m \cdot 5^n\))

设 \(\dfrac{1}{a}\) 是有限小数,小数点后共有 \(k\) 位,则可写为:

\[\frac{1}{a} = \frac{b}{10^k} \]

其中 \(b\) 为整数(即将小数部分去掉小数点后得到的整数,位数不足时在前面补零,不影响整数性)。

于是:

\[a \cdot b = 10^k = 2^k \cdot 5^k \]

这说明 \(a\) 是 \(2^k \cdot 5^k\) 的因数,因此 \(a\) 的质因数只可能是 \(2\) 和 \(5\),即存在非负整数 \(m, n\) 使得 \(a = 2^m \cdot 5^n\)(且 \(0 \le m \le k,\; 0 \le n \le k\))。


结论

综上,证毕:

\(\dfrac{1}{a}\) 能化为有限小数(有限不循环小数) \(\iff\) \(a = 2^m \cdot 5^n\)(\(a\) 的质因数只含 \(2\) 和 \(5\))。

Code

#include <bits/stdc++.h>
using namespace std;

int main() {
    int L, R;
    cin >> L >> R;
    int sum = 0;
    for (int i = L; i <= R; i++) {
        int k = i;
        while (k % 2 == 0) k /= 2;
        while (k % 5 == 0) k /= 5;
        if (k == 1) sum++;
    }
    cout << sum;
    return 0;
}

总结:

数学题

求个置顶~~
看完点个赞蟹蟹喵~
祝大家rp+++~

posted @ 2026-10-01 18:49  Spencer20262026  阅读(3)  评论(0)    收藏  举报