POJ 3696 The Luckiest number

22 篇文章 0 订阅

比较难的一道数论题了。。。在练习赛的时候碰到,和队友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的

 

代码:

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值