分数化小数 计蒜客(无限循环小数 循环节 欧拉函数 欧拉定理 十进制)

原题链接

分数化小数

题目描述

对于一个分数(不一定是最简形式),给出它的小数形式,如果小数有循环节的话,把循环节放在一对圆括号中.
例如,1/4 =0.25,1/3=0.3333写成0.(3)1/7= 0.142857142857...写成0.(142857)。如果结果是一种整数xxx,则用xxx.0 等表示整数xxx
输入包括一行,包括被空格分隔开的分子N和分母D(第一个是N,第二个是D)。
输出包括一行,为转换后的小数形式。

输入样例

45 56

输出样例

0.803(571428)

题目解释

题目中需要求一个 分数 的小数,如果是无限循环小数,则输出 0.xxx(xxx) 的格式。
因此我们考虑,先求出这个小数的 循环起始点(S)循环长度(T)

我们举个栗子。对于 x = 45 56 x = \frac{45}{56} x=5645 这种情况。
我们考虑先对 x ∗ 10 x * 10 x10 即: 45 56 , 450 56 , 4500 56 , 45000 56 ⋯ \frac{45}{56},\frac{450}{56},\frac{4500}{56},\frac{45000}{56}\cdots 5645,56450,564500,5645000
然后我们将这些分数的分子进行 m o d   56 mod\ 56 mod 56 操作, 即: 45 56 , 2 56 , 20 56 , 32 56 , 40 56 , 8 56 , 24 56 , 16 56 , 48 56 , 32 56 , 40 56 ⋯ \frac{45}{56},\frac{2}{56},\frac{20}{56},\frac{32}{56},\frac{40}{56},\frac{8}{56},\frac{24}{56},\frac{16}{56},\frac{48}{56},\frac{32}{56},\frac{40}{56}\cdots 5645,562,5620,5632,5640,568,5624,5616,5648,5632,5640
我们可以明显的发现当操作进行到第 10 次的时候和第 4 次重复了,显然已经形成了一个长度为 6 的循环节,即从第 4 项开始循环。

由此我们可以推广到更一般的情况。假设分数为 p q \frac{p}{q} qp ,由于小数部分和整数无关,因此我们可以假设这个分数为真分数。不妨假设 p &lt; q p&lt;q p<q

由上可知,我们可以把第 k + 1 k + 1 k+1 个分数写成 p ∗ 1 0 k   m o d   q q \frac{p*10^k\ mod\ q}{q}

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值