C0399 [NOI2016Day1-C]循环之美

内存限制:512 MB 时间限制:2000 ms

题目描述

牛牛是一个热爱算法设计的高中生。在他设计的算法中,常常会使用带小数的数进行计算。牛牛认为,如果在$𝑘$进制下,一个数的小数部分是纯循环的,那么它就是美的。

现在,牛牛想知道:对于已知的十进制数$𝑛$和$𝑚$,在$𝑘$进制下,有多少个数值上互不相等的纯循环小数,可以用分数$\frac{x}{y}$表示,其中$1 ≤ 𝑥 ≤ 𝑛,1 ≤𝑦≤𝑚$,且$𝑥,𝑦$是整数。

一个数是纯循环的,当且仅当其可以写成以下形式:

$𝑎.𝑐̇_1𝑐_2𝑐_3 ...𝑐_{p-1} 𝑐̇_p$

其中,$𝑎$是一个整数,$𝑝 ≥ 1$;对于$1 ≤ 𝑖 ≤ 𝑝$,$𝑐_𝑖$是$𝑘$进制下的一位数字。

例如,在十进制下,$0.45454545......=0.\dot{4}\dot{5}$是纯循环的,它可以用$\frac{5}{11}、\frac{10}{22}$等分数表示;在十进制下,$0.1666666......=0.1\dot{6}$则不是纯循环的,它可以用$\frac{1}{6}$等分数表示。

需要特别注意的是,我们认为一个整数是纯循环的,因为它的小数部分可以表示成0的循环或是𝑘 − 1的循环;而一个小数部分非零的有限小数不是纯循环的。

输入格式

只有一行,包含三个十进制正整数$𝑛,𝑚,𝑘$,意义如题所述。

输出

只输出一行一个整数,表示满足条件的美的数的个数。

样例

样例输入 1

2 6 10

样例输出 1

4

样例输入 2

23333 666666 310

样例输出 2

5089564081

提示

【样例1说明】

满足条件的数分别是:

1/1 = 1.0000 ……
1/3 = 0.3333 ……
2/1 = 2.0000 ……
2/3 = 0.6666……

1/1和2/2虽然都是纯循环小数,但因为它们相等,因此只计数一次;同样,1/3和2/6也只计数一次。

【提示】

这部分将提供一个将分数化为对应的小数的方法,如果你已经熟悉这个方法,你不必阅读本提示。

分数可以通过除法,用分子除以分母化为对应的小数。有些分数在除法过程中无法除尽,这样的分数在不断进行的除法过程中余数一定会重复出现。从商数的个位所对应的余数起,设第一次重复出现的余数前两次出现的位置所对应的商数位分别是小数点后第$𝑎$位和小数点后第$𝑏$位(特殊地:如果其中一个对应的商数位是个位,则认为$𝑎 = 0$;不妨设$𝑎 < 𝑏$),则其循环部分可以用小数点后第$𝑎 + 1$位到小数点后第$𝑏$位的循环来表示。

例如:在十进制下,将$\frac{5}{11}$转化为小数时,个位开始的商数依次为4,5,4, ...,对应的余数分别为6,5,6,...。余数第一次重复出现的位置是个位和小数点后第2位,那么$𝑎 = 0, 𝑏 = 2$即其循环部分可以用小数点第1位到第3位来表示。表示为:$\frac{5}{11}= 0.45454545 ... = 0.\dot{4}\dot{5}$。

在十进制下,将$\frac{1}{6}$转化为小数时,个位开始的商数依次为1,6,6, ...,对应的余数分别为4,4,4...。余数第一次重复出现的位置是小数点后第1位和小数点后第2位,即其循环部分可以用小数点后第2位来表示。表示为:$\frac{1}{6}=0.1666 ... ... = 0.\dot{1}\dot{6}$。

需要注意的是:商数重复出现并不代表进入了循环节。

【子任务】

对于所有的测试点,保证$1≤𝑛≤10^9,1≤𝑚≤10^9,2≤𝑘≤2000$。对于每个测试点,有以下约束(其中留空的表示没有特殊的约束):

屏幕快照 2019-06-04 下午12.50.36.png