擴展歐幾里得的第一次...... 數字

 

三.數字

題目描述

對於正整數n,定義s(n)n在十進制表示時各位數字的和,d(n)爲對n一直做s(n)直到n變成一位數。例如:s(58)=5+8=13s(13)=4d(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)

 

 

至此,證畢(霸氣護體)

 

貼貼代碼:(大家沒看上面的話就無視掉吧......)

 

 

 

秋哥的小羅附體:

 

 

 

自我感覺講得很清楚了.......

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章