博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
洛谷P4884 多少个1?(BSGS)
阅读量:5242 次
发布时间:2019-06-14

本文共 1347 字,大约阅读时间需要 4 分钟。

 

模数好大……__int128好麻烦……而且BSGS第一次写有点写蒙了……

$11...1(N个1)\equiv k(mod m)$很难算,那么考虑转化一下

先把$11...1(N个1)$写成$\frac{10^n-1}{9}$

则$$\frac{10^n-1}{9}\equiv k(mod m)$$

$$10^n-1\equiv k*9(mod m)$$

$$10^n\equiv k*9+1(mod m)$$

然后直接套上BSGS的板子

然后因为模数是long long级别的,所以要么用龟速乘,要么像我一样懒得只会用__int128了(记得手打输入输出)

1 //minamoto 2 #include
3 using namespace std; 4 #define int __int128 5 #define getc() (p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<21,stdin),p1==p2)?EOF:*p1++) 6 char buf[1<<21],*p1=buf,*p2=buf; 7 inline int read(){ 8 #define num ch-'0' 9 char ch;bool flag=0;int res;10 while(!isdigit(ch=getc()))11 (ch=='-')&&(flag=true);12 for(res=num;isdigit(ch=getc());res=res*10+num);13 (flag)&&(res=-res);14 #undef num15 return res;16 }17 inline void print(int x) {18 int sta[30],top=0;19 while (x) sta[++top]=x%10,x/=10;20 while (top) putchar(sta[top--]+'0');21 }22 23 24 inline int BSGS(int a,int b,int p){25 map
mp;mp.clear();26 b%=p;int t=sqrt((double)p)+1,tot=1;27 for(int j=0;j
=0&&i*t-j>=0) return i*t-j;36 tot=tot*a%p;37 }38 return -1;39 }40 signed main(){41 // freopen("testdata.in","r",stdin);42 int k=read(),m=read(),ans=BSGS(10,(9*k+1)%m,m);43 print(ans);44 return 0;45 }

 

转载于:https://www.cnblogs.com/bztMinamoto/p/9740439.html

你可能感兴趣的文章
java中静态代码块的用法 static用法详解
查看>>
Java线程面试题
查看>>
Paper Reading: Relation Networks for Object Detection
查看>>
day22 01 初识面向对象----简单的人狗大战小游戏
查看>>
mybatis源代码分析:深入了解mybatis延迟加载机制
查看>>
Flask三剑客
查看>>
Hibernate-缓存
查看>>
【BZOJ4516】生成魔咒(后缀自动机)
查看>>
提高PHP性能的10条建议
查看>>
svn“Previous operation has not finished; run 'cleanup' if it was interrupted“报错的解决方法...
查看>>
熟用TableView
查看>>
Java大数——a^b + b^a
查看>>
poj 3164 最小树形图(朱刘算法)
查看>>
服务器内存泄露 , 重启后恢复问题解决方案
查看>>
2.1命令行和JSON的配置「深入浅出ASP.NET Core系列」
查看>>
android一些细节问题
查看>>
KDESVN中commit时出现containing working copy admin area is missing错误提示
查看>>
利用AOP写2PC框架(二)
查看>>
【动态规划】skiing
查看>>
java定时器的使用(Timer)
查看>>