中国剩余定理
来源:互联网 发布:网络女生翻唱歌手 编辑:程序博客网 时间:2024/06/03 20:34
中国剩余定理的定义:http://zh.wikipedia.org/wiki/中国剩余定理
在互质的条件下:也即中国剩余定理
#include <iostream>#include <stdio.h>using namespace std;typedef __int64 int64;int64 a[15],b[15];int64 gcd_ex(int64 a,int64 b,int64& x,int64& y){ if(b==0) { x=1; y=0; return a; } int64 gcd=gcd_ex(b,a%b,x,y); int64 t; t=x; x=y; y=t-a/b*y; return gcd;}//求解线性方程组x=ai(mod mi)int64 China_Reminder(int len,int64* a,int64* n){ int64 N=1; int64 result=0; for(int i=0;i<len;i++) N=N*n[i]; for(int i=0;i<len;i++) { int64 m=N/n[i]; int64 x,y; gcd_ex(m,n[i],x,y); x=(x%n[i]+n[i])%n[i]; result=(result+m*a[i]*x%N)%N; } return result;}int main(){ int n; while(scanf("%d",&n)!=EOF) { for(int i=0;i<n;i++) scanf("%I64d%I64d",&a[i],&b[i]); printf("%I64d\n",China_Reminder(n,b,a)); } return 0;}
#include <iostream>#include <stdio.h>#include <cstring>using namespace std;typedef __int64 int64;int64 mod;int64 gcd(int64 a,int64 b){ if(b==0) return a; return gcd(b,a%b);}int64 gcd_ex(int64 a,int64 b,int64& x,int64& y){ if(b==0) { x=1; y=0; return a; } int64 d=gcd_ex(b,a%b,x,y); int64 t=x; x=y; y=t-a/b*y; return d;}//a在模n乘法下的逆元,没有则返回-1int64 inv(int64 a,int64 n){ int64 x,y; int64 t=gcd_ex(a,n,x,y); if(t!=1) return -1; return (x%n+n)%n;}//将两个方程合并为1个bool merge(int64 a1,int64 n1,int64 a2,int64 n2,int64& a3, int64& n3){ int64 d=gcd(n1,n2); int64 c=a2-a1; if(c%d) return false; c=(c%n2+n2)%n2; c/=d; n1/=d; n2/=d; c*=inv(n1,n2); c%=n2; c*=n1*d; c+=a1; n3=n1*n2*d; a3=(c%n3+n3)%n3; return true;}//在模线性方程组x=ai(mod ni) ni可以不互质int64 China_Reminder(int len,int64* a,int64* n){ int64 a1=a[0],n1=n[0]; int64 a2,n2; for(int i=1;i<len;i++) { int64 aa,nn; a2=a[i]; n2=n[i]; if(!merge(a1,n1,a2,n2,aa,nn)) return -1; a1=aa; n1=nn; } mod=n1; return (a1%n1+n1)%n1;}int64 a[1000],b[1000];int main(){ int k; while(scanf("%d",&k)!=EOF) { for(int i=0;i<k;i++) scanf("%I64d%I64d",&a[i],&b[i]); printf("%I64d\n",China_Reminder(k,b,a)); } return 0;}
0 0
- 中国剩余定理模版【中国剩余定理】
- 中国剩余定理
- 中国剩余定理
- 中国剩余定理
- 中国剩余定理
- 中国剩余定理
- 中国剩余定理
- 中国剩余定理
- 中国剩余定理
- 数论-中国剩余定理
- 中国剩余定理
- 中国剩余定理
- 中国剩余定理
- 数论/中国剩余定理
- 关于《中国剩余定理》
- 中国剩余定理
- 模板[中国剩余定理]
- 中国剩余定理
- JAVA网络编程——InetAddress、InetSocketAddress和URL
- HDU 2066 一个人的旅行
- C++类的大小
- 十天学习PHP之第二天
- sdfsdf
- 中国剩余定理
- [POJ 3264]Balanced Lineup(ST算法求RMQ)
- hdu 4496 D-City
- 生活之你为什么不学习
- gradle
- 安装Titanium Studio遇到Failed to create java virtual machine的解决方案
- 论文实验笔记之二:EViews6跑ARIMA
- C++学习笔记12 构造函数与析构函数下
- 【2933】人活着系列之Streetlights (kruskal算法)(sdutOJ)