这里面的一个转换的小技巧很重要,把888...8转换成(10^x-1)/9*8。神来之笔,佩服。

这样有(10^x-1)/9*8=L*p得10^x-1=L*p*9/8,设m=9*L/gcd(L,8)。这一步如何想到的呢?其实是为了使m与10互质而做的。因为这样必有m*p1=10^x-1。使得同余方程

10^x=1 mod m,相信到了这一步,都知道用欧拉定理了。于是只需求出phi(m),枚举其因子,使得同余方程成立即可

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <cmath>
#define LL __int64
using namespace std; LL gcd(LL a,LL b){
if(b==0) return a;
return gcd(b,a%b);
}
LL fac[10000]; int cnt;
LL Euler(LL m){
LL res=m;
LL k=(LL)sqrt((double)m);
for(LL i=2;i<=k;i++){
if(m%i==0){
res=res-res/i;
while(m%i==0)
m/=i;
}
}
if(m>1)
res=res-res/m;
return res;
} LL multi(LL a,LL b,LL m){
LL ret=0;
while(b>0){
if(b&1) ret=(ret+a)%m;
b>>=1;
a=(a<<1)%m;
}
return ret;
} LL quick(LL a,LL k,LL m){
LL ans=1;
while(k){
if(k&1)
ans=multi(ans,a,m);
k=(k>>1);
a=multi(a,a,m);
}
return ans;
} int main(){
LL l; int kase=0;
while(scanf("%I64d",&l),l){
if(l%16==0||l%5==0) {
printf("Case %d: 0\n",++kase);
continue;
}
cnt=0;
LL m=l*9/gcd(l,(LL)8);
LL phi=Euler(m);
LL ans;
LL k=(LL)sqrt((double)phi);
for(LL i=1;i<=k;i++){
if(phi%i==0){
fac[cnt++]=i;
fac[cnt++]=phi/i;
}
}
sort(fac,fac+cnt);
for(int i=0;i<cnt;i++){
ans=quick((LL)10,fac[i],m);
if(ans==1){
printf("Case %d: %I64d\n",++kase,fac[i]);
break;
}
}
}
return 0;
}

  

最新文章

  1. zabbix完整安装
  2. 剑指Offer:面试题32——从1到n整数中1出现的次数(java实现)
  3. Double 数据保留两位小数一:五舍六入
  4. 修改ftp端口为50021
  5. FileUpload1上传控件
  6. js定时相关函数:
  7. [转]在Ubuntu 下安装Redis 并使用init 脚本启动
  8. java实例--海盗的最优方案
  9. 用360安全浏览器控制网速,调试loading
  10. Hadoop 学习笔记 (十一) MapReduce 求平均成绩
  11. php判断http头还是https头
  12. gradle(转)
  13. inception cenOS 安装
  14. 微信小程序开发问答《五十四》同步请求授权 &amp; 用户拒绝授权,重新调起授权 ... ...
  15. Windows环境下多线程编程原理与应用读书笔记(2)————面向对象技术
  16. shell命令输入输出重定向
  17. Asp.Net Core 轻松学-多线程之Task快速上手
  18. JAVA课程设计——一个简单的教务人事管理系统
  19. Perl和操作系统交互(一):system、exec和反引号
  20. PHP的特质Trait使用

热门文章

  1. HDU 2815
  2. [ACM] POJ 2154 Color (Polya计数优化,欧拉函数)
  3. Quartz2D二维画图引擎
  4. Linux系统编程——多线程实现多任务
  5. asp.net学习指南
  6. CentOS7开启网络配置
  7. 微信开发中的序列化json问题..
  8. Firefox Quantum:开发者版本 推荐
  9. HTML5 CSS3面试题
  10. 清北集训Day3T1(转换)