博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
变同余求最小公倍数
阅读量:3952 次
发布时间:2019-05-24

本文共 1151 字,大约阅读时间需要 3 分钟。

我知道部分同学最近在看中国剩余定理,就这个定理本身,还是比较简单的: 

假设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 12 30 0

Sample Output

5

【题意】

题目的意思 给定k,a

然后再给定 k个数

求最小的N 使得 N%mi =mi -a;

根据同余的性质 我们可以 化简为

N%mi+a=mi

N+a=0(mod mi)

这样题目就变成熟悉的公式了 就是求k个数的最小公倍数,最后减去a

 

#include 
#include
using namespace std;typedef long long LL;LL gcd(LL a,LL b){ if(b==0) return a; else return gcd(b,a%b);}LL lcm(LL a,LL b){ return a*b/gcd(a,b);}int main(){ int k,a; ios::sync_with_stdio(false); while(cin>>k>>a) { if(k==0&&a==0) break; LL ans=1,x; for(int i=0;i
>x; ans=lcm(ans,x); } cout<
<

 

转载地址:http://spyzi.baihongyu.com/

你可能感兴趣的文章
CImg库编译使用.
查看>>
SQL Server循环执行动态SQL语句.
查看>>
ubuntu10.4网卡名由eth0改为eth4,导致获得不了IP地址.解决方法.
查看>>
CheckPoint关键词做字段名使用.
查看>>
Qt QSplitte分割器使用(用户手动改变窗口大小)
查看>>
Qt动态加载动态库
查看>>
java8新特性
查看>>
git clone时RPC failed; curl 18 transfer closed with outstanding read data remaining
查看>>
Java8内存模型—永久代(PermGen)和元空间(Metaspace)
查看>>
maven中jar、war、pom的区别
查看>>
maven之pom.xml配置文件详解
查看>>
java基础学习之抽象类与接口的区别
查看>>
java基础学习之包、类、方法、属性、常量的命名规则
查看>>
java基础知识学习之匿名内部类
查看>>
SSM框架和SSH框架的区别
查看>>
Elasticsearch-基础介绍及索引原理分析
查看>>
过滤敏感词算法
查看>>
linux学习之shell脚本if判断参数-n,-d,-f等
查看>>
linux学习之windos文件在linux里面乱码解决
查看>>
idea快捷键
查看>>