三.数字
题目描述
对于正整数n,定义s(n)为n在十进制表示时各位数字的和,d(n)为对n一直做s(n)直到n变成一位数。例如:s(58)=5+8=13,s(13)=4,d(58)=d(13)=d(4)=4。
定义正整数x是优美的,当且仅当存在至少一个正整数y使得y*d(y)=x。
Your Task
请你求出,区间[A,B]中有多少个数是优美的。
输入文件
第一行T表示数据组数
对于每组数据,一行中A B
输出文件
对于每组数据,在一行中输出[A,B]中优美的数的个数
样例输入
2
47 58
123456789 9876543210
样例输出
4
2618024258
数据约定
20%:1《=A<=B<=10^8
100%:T<=20,1<=A<=B<=10^10
首先,根据RP守恒定理,今天早上没打开CF,所以此刻RP一定爆棚,就随便编了个d(n)的表达式,没想到居然对了......
(关于RP守恒定理 http://baike.baidu.com/view/88936.htm)
d(n)=(n-1)mod 9+1.
有人问了,为什么不是 n mod 9 呢,当n=9时就不成立啊......
然后,我们设 y=9*k+b (b<=9) 为什么b=9是可以的呢? 秋哥小白般地就问了,于是我说,后面会讲.......
x=d(y)*y=((y-1) mod 9+1)*y=((b+1)-1)*(9*k+b)=9*b*k+b^2.
为什么b可以等于9,当y=9 时 , (0+9)mod 9+1=1 才成立 若b不能取9 则 得出的答案是(9+0)mod 9+1=1 不成立
得到b从1 到 9 的 方程,然后我比较懒,不想写了,自己推,通式就是 X=9*B*K+B^2 b从1 到 9 递增
然后发现有一些互相包含的X,排除掉(秋哥说要写“排”字,不然别人WA了,就过来说:“不告诉你”)(大概是:b=1和8 b=3 和 6)
又发现有一些有交集的X,可以加上A和B,减掉C
用扩展欧几里得可以推出 ,联立两个方程,解一个不定方程,q=变化数t*x原本的系数,w=最小的x值,满足x mod q=w 的所有x减去即可。
(C是A与B的交集)(大概是:b=2和7 b=4 和 5)
最后又发现有的既不包含也不相交,就直接MOD掉......即可 (大概是:b=3和9)
至此,证毕(霸气护体)
贴贴代码:(大家没看上面的话就无视掉吧......)
秋哥的小罗附体:
自我感觉讲得很清楚了.......