#P3358. Period of an Infinite Binary Expansion

Period of an Infinite Binary Expansion

题目描述

x=0.a1a2a3...{x} = 0.a_1a_2a_3...为有理数zz的小数部分的二进制表示。假设x{x}是循环的,那么我们可以将其写为

{x} = 0.a1a2...ar(ar+1ar+2...ar+s)w

其中rrss为整数,满足r0r \geq 0s>0s > 0。此外,(ar+1ar+2...ar+s)w(a_{r+1}a_{r+2}...a_{r+s})^w表示x{x}的一个无限重复的二进制子序列。

子序列x1=a1a2...arx_1 = a_1a_2 ... a_r被称为x{x}前周期,而x2=ar+1ar+2...ar+sx_2 = a_{r+1}a_{r+2} ... a_{r+s}则是x{x}周期

若选择x1|x_1|x2|x_2|尽可能小,则x1x_1称为最小前周期x2x_2称为x{x}最小周期

例如,x=1/10=0.0001100110011(00110011)wx = 1/10 = 0.0001100110011(00110011)^w,其中000110011001100011001100111/101/10的一个前周期,0011001100110011是一个周期。

然而,我们也可以将1/101/10写为1/10=0.0(0011)w1/10 = 0.0(0011)^w,此时00是最小前周期,001100111/101/10的最小周期。

1/101/10的最小周期从二进制小数点右侧第2位开始,最小周期的长度为4。

编写一个程序,找出小于1的正有理数的小数部分在二进制表示下的最小周期的第一个比特的位置,以及最小周期的长度,其中前周期也取最小值。

输入

每一行是一个测试用例,表示一个有理数p/qp/q,其中ppqq为整数,且p0p \geq 0q>0q > 0

输出

每一行对应一个测试用例,输出一个数对,第一个数是最小周期的第一个比特的位置,第二个数是该有理数的最小周期的长度。

输入样例 1

1/10
1/5
101/120
121/1472

输出样例 1

Case #1: 2,4
Case #2: 1,4
Case #3: 4,4
Case #4: 7,11

来源

Manila 2006