博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hdu1573 中国剩余定理
阅读量:7033 次
发布时间:2019-06-28

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

从爱神那看的中国剩余定理解法,挺容易理解的,就是一个循环迭代更新下去

细节还是很重要!

1 #include
2 #include
3 #define LL long long 4 void exgcd(LL a,LL b,LL& d,LL &x,LL &y) 5 { 6 if (!b) {d=a; x=1; y=0; } 7 else {exgcd(b,a%b,d,y,x); y-=x*(a/b); } 8 } 9 int main()10 {11 LL T,n,m,i,flag,d,x,y,tmp;12 LL a[15],b[15];13 scanf("%I64d",&T);14 while (T--)15 {16 scanf("%I64d%I64d",&n,&m);17 for (i=1;i<=m;i++) scanf("%I64d",&a[i]);18 for (i=1;i<=m;i++) scanf("%I64d",&b[i]);19 flag=0;20 for (i=2;i<=m;i++)21 {22 exgcd(a[1],a[i],d,x,y);23 if ((b[i]-b[1])%d) {flag=1; break; }//只有差为gcd的倍数才存在解(exgcd)24 tmp=a[i]/d;//tmp为了防止b[i]-b[1]为负,要把下面的x使变为负25 x=(x*(b[i]-b[1])/d%tmp+tmp)%tmp;26 b[1]=a[1]*x+b[1];27 a[1]=a[1]*a[i]/d;28 }29 if (flag||b[1]>n) printf("0\n");30 else if (b[1]==0) printf("%I64d\n",n/a[1]);//注意余数为031 else printf("%I64d\n",(n-b[1])/a[1]+1);32 }33 }
View Code

转载于:https://www.cnblogs.com/xiao-xin/articles/4081006.html

你可能感兴趣的文章
GitLab
查看>>
【常用配置】Spring框架web.xml通用配置
查看>>
[leetcode 240]Search a 2D Matrix II
查看>>
域名指的是这一级目录
查看>>
[Angular] Creating an Observable Store with Rx
查看>>
[转]Porting to Oracle with Entity Framework NLog
查看>>
chmod更改文件的权限
查看>>
oracle 10g/11g RAC 启停归档模式
查看>>
poj3461 Oulipo
查看>>
OAuth2.0学习(1-12)开源的OAuth2.0项目和比较
查看>>
Gitlab,这也就O了???
查看>>
2014 百度之星 1003 题解 Xor Sum
查看>>
Linux中在主机上实现对备机上文件夹及文件的操作的C代码实现
查看>>
iOS 块的简单理解
查看>>
idea中如何配置git以及在idea中初始化git
查看>>
关于JQuery Class选择器的一点
查看>>
POJ3264 Balanced Lineup
查看>>
redis-cli 连接远程服务器
查看>>
emlog通过pjax实现无刷新加载网页--完美解决cnzz统计和javascript失效问题
查看>>
sublime 之 vitage/emmet
查看>>