我知道部分同学最近在看中国剩余定理,就这个定理本身,还是比较简单的:
假设m1,m2,…,mk两两互素,则下面同余方程组:

x≡a1(mod m1)

x≡a2(mod m2)



x≡ak(mod mk)

在0<=<m1m2…mk内有唯一解。

记Mi=M/mi(1<=i<=k),因为(Mi,mi)=1,故有二个整数pi,qi满足Mipi+miqi=1,如果记ei=Mi/pi,那么会有:

ei≡0(mod mj),j!=i

ei≡1(mod mj),j=i

很显然,e1a1+e2a2+…+ekak就是方程组的一个解,这个解加减M的整数倍后就可以得到最小非负整数解。

这就是中国剩余定理及其求解过程。

现在有一个问题是这样的:

一个正整数N除以M1余(M1 - a),除以M2余(M2-a), 除以M3余(M3-a),总之, 除以MI余(MI-a),其中(a<Mi<100 i=1,2,…I),求满足条件的最小的数。

Input输入数据包含多组测试实例,每个实例的第一行是两个整数I(1<I<10)和a,其中,I表示M的个数,a的含义如上所述,紧接着的一行是I个整数M1,M1...MI,I=0 并且a=0结束输入,不处理。

Output对于每个测试实例,请在一行内输出满足条件的最小的数。每个实例的输出占一行。

Sample Input

2 1
2 3
0 0

Sample Output

5
#include<iostream>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<cstdio>
#define N 1000010
using namespace std;
typedef long long ll;
ll gcd(ll a,ll b)
{
return b==0?a:gcd(b,a%b);
}
ll lcm(ll a,ll b)
{
return a/gcd(a,b)*b;
}
int main()
{
ll n,y,m;
while(~scanf("%lld%lld",&n,&y),n&&y)
{
ll ans=1;
for(int i=0;i<n;i++)
{
scanf("%lld",&m);
ans=lcm(m,ans);
}
cout<<ans-y<<endl;
} }

  

最新文章

  1. [转]C#反射-Assembly.Load、LoadFrom与LoadFile进阶
  2. leetcode Pascal&#39;s triangle
  3. javascript实现原生ajax的方法
  4. YEdit
  5. 网络包处理工具NetBee
  6. COJ559 回文
  7. XML 解析器
  8. 嵌入式 RTSP流媒体播放器实现
  9. bzoj3524 bzoj2223
  10. openwrt补丁
  11. Android N特性解析
  12. Sublime 常用快捷键
  13. 【2017-04-01】JS字符串的操作、时间日期的操作、函数、事件、动画基础
  14. 两个linux之间拷贝文件及文件夹
  15. 527D.Clique Problem
  16. Scala知识点汇总
  17. 在pypi上发布python包详细教程
  18. 待了解概念_GraphicsView
  19. 【linux】监控磁盘情况并自动删除备份文件
  20. RabbitMQ系列之RabbitMQ集群

热门文章

  1. Java 重写hashCode() 时为什么要用 31 来计算
  2. SharePoint Tricks - HTML &amp; CSS &amp; JavaScript
  3. 机器学习(一)——K-近邻(KNN)算法
  4. PhoneGap API介绍:Events
  5. C#操作CAD-调用winform
  6. input file 类型为excel表格
  7. asyncio标准库1 Hello World
  8. Linux --防火墙(一)
  9. ul自适应li问题
  10. jsonp跨域请求响应结果处理函数(python)