中国剩余定理及其拓展
来源:互联网 发布:centos yum wget 编辑:程序博客网 时间:2024/05/17 07:45
这里写代码片///中国剩余定理/// 用于计算x==a[i](mod m[i]) 的一个特解,要求所有的模两两互质。///简单的求解过程如下:///1.M0=m[1]*m[2]*...m[n];///c[i]是方程m[i]*x==1(mod m[i])的一个特解,其中M[i]=M0/m[i];///x==a[1]*c[1]*M[1]+a[2]*c[2]*M[2]+....a[n]*c[n]*M[n](mod M0);///时间复杂度nlogM;///返回特解的值;void gcd_ex(LL a,LL b,LL &x,LL &y){ if(b==0) {x=1;y=0;} else { gcd_ex(b,a%b,y,x); y-=a/b*x;}}LL CRT(LL *a,LL *m,LL n){ LL M=1,res=0; for(int i=0;i<n;i++) M*=m[i]; for(int i=0;i<n;i++) { LL x,y,temp=M/m[i]; gcd_ex(temp,m[i],x,y); res=(res+temp*x*a[i])%M; } return (res+M)%M;}///拓展中国剩余定理/// 用于计算x==a[i](mod m[i]) 的一个特解,方程不必要求所有的模两两互质。///方法:将方程两两合并。LL gcd_ex(LL a,LL b,LL &x,LL &y){ if(b==0) {x=1;y=0;return a;} LL d=gcd_ex(b,a%b,y,x); y-=a/b*x;return d;}inline LL mod(LL a,LL m){return a%m+(a%m>0?0:m);}LL CRT_ex(int n,int a[],int m[]){ if(n==1&&a[0]==0) return m[0]; LL ans=a[0],lcm=m[0]; bool flag=true; for(int i=1;i<n;i++) { LL x,y,gcd; gcd=gcd_ex(lcm,m[i],x,y); if((a[i]-ans)%gcd){flag=false;break;} LL temp=lcm*mod((a[i]-ans)/gcd*x,m[i]/gcd); lcm=lcm/gcd*m[i]; ans=mod(ans+temp,lcm); } return flag?ans:-1;}
阅读全文
0 0
- 中国剩余定理及其拓展
- BZOJ-1407 Savage 枚举+拓展欧几里得(+中国剩余定理??)
- 51Nod-集合计数(拓展欧几里得+中国剩余定理)
- POJ.1006 Biorhythms (拓展欧几里得+中国剩余定理)
- HDU 1370 Biorhythms(中国剩余定理 + 拓展欧几里得)
- HDU 3579 Hello Kiki(拓展中国剩余定理)
- 中国剩余定理模版【中国剩余定理】
- “中国剩余定理”简介、算理及其应用
- 中国剩余定理简介、算例及其应用
- 中国剩余定理及其扩展——学习(复习)笔记
- 中国剩余定理
- 中国剩余定理
- 中国剩余定理
- 中国剩余定理
- 中国剩余定理
- 中国剩余定理
- 中国剩余定理
- 中国剩余定理
- 最深入浅出的面向对象图书!
- GUID
- angularjs,bootstrap快速创建手风琴效果
- 怎么做好饮料市场?是产品重要还是产品结构重要?
- kafka集群扩容以及数据迁移
- 中国剩余定理及其拓展
- OpenCV的基本矩阵操作与示例
- Tensorboard的打开姿势
- python的str()和repr()函数比较
- 邓志康原创Test
- angualrJs对数据库数据处理的增删改查
- spring mvc配置 + dbcp数据源+jdbcTemplate
- FreeRTOS常用API
- 图片的三级缓存——学习笔记