[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+++~
浙公网安备 33010602011771号