博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hdu-5478 Can you find it(快速幂)
阅读量:5049 次
发布时间:2019-06-12

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

 

思路:暴力。

由于(ak1*n+b1+bk2(n-1)+1)(modC)=0对于任意n为正整数恒成立,那么对于n=1成立可得(ak1+b1+b)(modC)=0;n =2时可得(a2*k1+b1+bk2+1)(modC)=0;

那么将n=1时所得的等式*ak1(modC)得(a2*k1+b1+b*ak1)(modC)=0;

那么和n=2时所得的式子比较可得(ak1)(modC)=(bk2)(modC);

那么由于1<=a,b<C;

那么从1循环到C枚举a,用快速幂求ak1,ak1+b1,用n=1时的等式求b,快速幂求bk2 ,判断是否(ak1)(modC)=(bk2)(modC);

下面证明;当a,b符合1,2式时,就(ak1*n+b1+bk2(n-1)+1)(modC)对于任意n为正整数恒成立。

1式可解得b=(C-(ak1+b1)modC);由1,2式得(ak1)(modC)=(bk2)(modC);

那么原式可改写为:(ak1*n+b1+ak1(n-1)*(C-(ak1+b1)modC))(modC)=0;

==(ak1*n+b1+ak1(n-1)*(C-(ak1+b1))(modC)=0

==(C*ak1(n-1))(modC)=0;

得证。

 时间复杂度为(n*log(n));

1 #include
2 #include
3 #include
4 #include
5 #include
6 #include
7 typedef long long ll; 8 ll quick(ll x,ll y); 9 ll C;10 using namespace std;11 int main(void)12 {13 ll i,j,k,p,q;14 int e=0;15 while(scanf("%lld %lld %lld %lld",&C,&k,&p,&q)!=EOF)16 { int flag=0;17 e++;18 printf("Case #%d:\n",e);19 for(i=1;i

 

转载于:https://www.cnblogs.com/zzuli2sjy/p/4976335.html

你可能感兴趣的文章
bzoj1606
查看>>
jdk从1.8降到jdk1.7失败
查看>>
一些关于IO流的问题
查看>>
mongo备份操作
查看>>
8 -- 深入使用Spring -- 3...1 Resource实现类InputStreamResource、ByteArrayResource
查看>>
硬件笔记之Thinkpad T470P更换2K屏幕
查看>>
一个关于vue+mysql+express的全栈项目(六)------ 聊天模型的设计
查看>>
【知识库】-数据库_MySQL 的七种 join
查看>>
.net 写文件上传下载webservice
查看>>
noSQL数据库相关软件介绍(大数据存储时候,必须使用)
查看>>
iOS开发——缩放图片
查看>>
HTTP之URL的快捷方式
查看>>
满世界都是图论
查看>>
配置链路聚合中极小错误——失之毫厘谬以千里
查看>>
Python codes
查看>>
【BZOJ4487】[JSOI2015] 染色问题(高维容斥)
查看>>
Ubuntu 环境变量
查看>>
一步一步学MySQL-日志文件
查看>>
bzoj3994: [SDOI2015]约数个数和
查看>>
hdu5306 Gorgeous Sequence
查看>>