比较难的一道数论题了。。。在练习赛的时候碰到,和队友YY了很久,没想到把n个8怎么表示出来
首先,由于特殊性(每个位上都是8),我们把m=888...8(n个8)表示成m=8*(10^0+10^1+...+10^n-1)=8*(10^n-1)/9(关键之一)
设m=k*l
则8*(10^n-1)/9=k*l <=> 8*(10^n-1)/9 = 0 (mod l)
<=> 8*(10^n-1) = 0 (mod 9*l)
<=> 10^n-1 = 0 (mod gcd(8,l)*9*l)
<=> 10^n =1 (mod gcd(8,l)*9*l)
设p=gcd(8,l)*9*l,则10^n =1 (mod p) (1)
有欧拉定理,当10和p互素时,存在n=PHI(p),使得上式成立,如果10和p不互素,即gcd(10,l)!=1,则无解(关键之二)
然后,PHI(m)并不是最小的答案,而是它的因子中满足等式(1)的最小的因子 (关键之三)
并且根据前人经验,在求10^n%p时,一般的快速求幂会产生溢出错误(p超出int32),要用更BT的
代码: