互质版:

#include

#include

#include

using namespace std;

typedef __int64 int64;

int64 a[15],b[15];

int64 Extend_Euclid(int64 a, int64 b, int64&x, int64& y)

{

if(b==0)

{

x=1,y=0;

return a;

}

int64 d = Extend_Euclid(b,a%b,x,y);

int64 t = x;

x = y;

y = t - a/b*y;

return d;

}

//求解模线性方程组x=ai(mod ni)

int64 China_Reminder(int len, int64* a, int64* n)

{

int i;

int64 N = 1;

int64 result = 0;

for(i = 0; i < len; i++)

N = N*n[i];

for(i = 0; i < len; i++)

{

int64 m = N/n[i];

int64 x,y;

Extend_Euclid(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

#include

#include

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 Extend_Euclid(int64 a, int64 b, int64&x, int64& y)

{

if(b==0)

{

x=1,y=0;

return a;

}

int64 d = Extend_Euclid(b,a%b,x,y);

int64 t = x;

x = y;

y = t - a/b*y;

return d;

}

//a在模n乘法下的逆元,没有则返回-1

int64 inv(int64 a, int64 n)

{

int64 x,y;

int64 t = Extend_Euclid(a,n,x,y);

if(t != 1)

return -1;

return (x%n+n)%n;

}

//将两个方程合并为一个

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_Reminder2(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 i;

int k;

while(scanf("%d",&k)!=EOF)

{

for(i = 0; i < k; i++)

scanf("%I64d %I64d",&a[i],&b[i]);

printf("%I64d\n",China_Reminder2(k,b,a));

}

return 0;

}

中国剩余定理matlab非互质,中国剩余定理模板(互质版和非互质版)相关推荐

  1. 中国剩余定理matlab程序,中国剩余定理即孙子定理的五种解法

    中国剩余定理即孙子定理的五种解法 -- 学习初等数论心得笔记 2013-10-04 博文2015-12修改 "中国剩余定理"是公元5-6世纪.我国南北朝时期的一部著名算术著作< ...

  2. 中国剩余定理及扩展中国剩余定理

    目录 中国剩余定理CRT 扩展中国剩余定理ExCRT TJOI2009 猜数字 HDU 1573 X问题 中国剩余定理CRT 中国剩余定理是用来求线性同于方程组的. \[ \begin{aligned ...

  3. 中国剩余定理与扩展中国剩余定理

    中国剩余定理又名孙子定理 用来求解同余线性方程组 其中m1,m2,m3-两两互质,求x的最小整数解: 设M为m1,m2,m3-的公倍数. 根据上面的推导,为什么x的通解形式是累加呢? 根据上面推导,推 ...

  4. 数论一之定理证明——裴蜀/威尔逊/费马/扩展欧几里得/[扩展]欧拉/[扩展]中国剩余定理,欧拉函数,逆元,剩余系,筛法

    打死没想到会在H老师处学懂数论 同余,整除 模运算 埃式筛法 欧拉筛法 最大公约数和最小公倍数 辗转相除法 更相减损术 裴蜀定理 威尔逊定理 费马定理 同余等价类.剩余系.缩系 欧拉函数 欧拉定理 扩 ...

  5. 中国剩余定理拓展中国剩余定理

    复习 中国剩余定理: x ≡ a 1 ( m o d m 1 ) x ≡a_1(mod m_1) x≡a1​(modm1​) x ≡ a 2 ( m o d m 2 ) x ≡a_2(mod m_2) ...

  6. 博客处女作:中国剩余定理与扩展中国剩余定理

    各位好啊,这里是蒟蒻gigo_64的第一篇博客,,这里我们开始啦. 本文需要读者知晓扩展欧几里得,如果不会请点击这个大佬的链接;https://blog.csdn.net/sslz_fsy/artic ...

  7. ACM数论----中国剩余定理与拓展中国剩余定理

    一.问题引入: 在<孙子算经>中有这样一个问题:"今有物不知其数,三三数之剩二(除以3余2),五五数之剩三(除以5余3),七七数之剩二(除以7余2),问物几何?"这个问 ...

  8. 中国剩余定理学习 拓展中国剩余定理

    中国剩余定理学习 && 拓展中国剩余定理 中国剩余定理: 拓展中国剩余定理: 中国剩余定理: 仅供自己复习时查看一下大佬笔记,详细学习过程在大佬的博客. 学习连接:https://ww ...

  9. python中国剩余定理公式_《孙子算经》之物不知数题:中国剩余定理

    1.<孙子算经>之"物不知数"题 今有物不知其数,三三数之剩二,五五数之剩七,七七数之剩二,问物几何? 2.中国剩余定理 定义: 设 a,b,m 都是整数.  如果 m ...

最新文章

  1. 获取SQLServer数据库中所有表
  2. Hibernate5.x Idea搭建
  3. 问题(待完成):微服务,失败回滚?保持事务的原子性?多步骤调用,如何来实现...
  4. SAP Spartacus ConfigModule.withConfig的处理逻辑
  5. 毕马威中国领先地产科技企业50
  6. 在ubuntu下面安装glew
  7. ctfshow-萌新-web13( 利用代码执行漏洞获取网站敏感文件)
  8. 山东大学人工智能导论实验四 利用神经网络分类红色和蓝色的花
  9. 包邮送5本!新书推荐:MLOps实践――机器学习从开发到生产
  10. 一位营销总监的辞职信(非常经典)
  11. 多语言适配分享会演讲稿
  12. Unity批量给模型上同一个材质
  13. 20220211关于TL-WDN6200(RTL8812AU)在ubuntu20.04.3下安装驱动程序的历险记
  14. Qt中提示“常量中有换行符“的解决方法
  15. 随机生成一个有向无环图
  16. 服务器配置和部署(待完善)
  17. SCRUM团队的三个角色
  18. 最好的前端开发资源推荐
  19. RoboWare安装教程
  20. virtual audio cable

热门文章

  1. 新JSON绑定库JSON-B发布公开预览版
  2. MongoDB 3.0 导入命令
  3. Rails项目结构详解
  4. IBM为世博会服务支持建立快速反应通道
  5. golang红包算法
  6. 多态定义、多态实现、多态分类。
  7. linux64平台上编译32位程序: GCC编译选项 -m64 -m32 -mx32
  8. LC_ALL=C的含义
  9. 从单体应用到微服务架构演化
  10. python九:元祖(tuple)