#include <iostream>
#include <stdio.h>
#include <string.h>
#include <algorithm>
#include <stdlib.h>
using namespace std;
#define N 10100 /*对于x=r0(mod m0)
x=r1(mod m1)
...
x=rn(mod mn)
输入数组m和数组r,返回[0,[m0,m1,...,mn]-1] 范围内满足以上等式的x0。
x的所有解为:x0+z*[m0,m1,...mn](z为整数)
*/
long long cal_axb(long long a,long long b,long long mod)
{
//防乘法溢出
long long sum=;
while(b)
{
if(b&) sum=(sum+a)%mod;
b>>=;
a=(a+a)%mod;
}
return sum;
} //ax + by = gcd(a,b)
//传入固定值a,b.放回 d=gcd(a,b), x , y
void extendgcd(long long a,long long b,long long &d,long long &x,long long &y)
{
if(b==){d=a;x=;y=;return;}
extendgcd(b,a%b,d,y,x);
y -= x*(a/b);
} long long Multi_ModX(long long m[],long long r[],int n)
{
long long m0,r0;
m0=m[]; r0=r[];
for(int i=;i<n;i++)
{
long long m1=m[i],r1=r[i];
long long k0,k1;
long long tmpd;
extendgcd(m0,m1,tmpd,k0,k1);
if( (r1 - r0)%tmpd!= ) return -;
k0 *= (r1-r0)/tmpd;
m1 *= m0/tmpd;
r0 = ( cal_axb(k0,m0,m1)+r0)%m1;
m0=m1;
}
return (r0%m0+m0)%m0;
}
/*
int main()
{
int k;
while(cin>>k)
{
long long a[N],r[N];
for(int i=0;i<k;i++)
cin>>a[i]>>r[i];
cout<<Multi_ModX(a,r,k)<<endl;
}
return 0;
}
*/

最新文章

  1. (一)Spark简介-Java&amp;Python版Spark
  2. Dubbo_异常_Service启动时默认将方法注册到内网IP
  3. [译]:Orchard入门——构建你的第一个Orchard网站
  4. 用 Graphviz+pvtrace 可视化函数调用
  5. iOS 笔记
  6. html的input输入框边框
  7. js方法控制html表格的增加和删除
  8. cocos2dx libcurl
  9. Android ContentProvider和Uri详解 (绝对全面)
  10. 切割TOMCAT日志
  11. (转载)linux那点事儿(上)
  12. springMVC3学习(四)--访问静态文件如js,jpg,css
  13. keyboard添加down按钮
  14. html中的图片、css、js等路径加载问题
  15. Android学习资料整理
  16. js图片懒加载(滚动加载)是否生效
  17. MyEclipse 2014专业版的破解--Windows系统的软件安装
  18. vue中input输入框的模糊查询实现
  19. 红外条码扫描器的另类使用C#版
  20. 解密SVM系列(二):SVM的理论基础

热门文章

  1. 专业术语:闭包、网站优化 Gzip 服务器端文件压缩
  2. 查看Linux服务器CPU使用率、内存使用率、磁盘空间占用率、负载情况
  3. ISP模块之RAW DATA去噪(一)
  4. /profile文件修改后立即生效
  5. Android学习(十三) BroadcastReceiver组件(广播)
  6. chown将指定文件的拥有者改为指定的用户或组(转)
  7. [经验总结]material design效果与开发总结
  8. 修改EXCEL
  9. ajax读取文件内容
  10. PHP接收和发送XML数据(json也通用)