中国剩余定理
2016-07-02 21:43
357 查看
中国剩余定理(CRT)的表述如下
设正整数
两两互素,则同余方程组
有整数解。并且在模
下的解是唯一的,解为
其中
,而
为
模
的逆元。
int CRT(int a[],int m[],int n)
{
int M = 1;
int ans = 0;
for(int i=1; i<=n; i++)
M *= m[i];
for(int i=1; i<=n; i++)
{
int x, y;
int Mi = M / m[i];
extend_Euclid(Mi, m[i], x, y);
ans = (ans + Mi * x * a[i]) % M;
}
if(ans < 0) ans += M;
return ans;
}
普通的中国剩余定理要求所有的
互素,那么如果不互素呢,怎么求解同余方程组?
这种情况就采用两两合并的思想,假设要合并如下两个方程
那么得到
在利用扩展欧几里得算法解出
的最小正整数解,再带入
得到
后合并为一个方程的结果为
这样一直合并下去,最终可以求得同余方程组的解。
原来文章地址:http://blog.csdn.net/acdreamers/article/details/8050018
设正整数
两两互素,则同余方程组
有整数解。并且在模
下的解是唯一的,解为
其中
,而
为
模
的逆元。
int CRT(int a[],int m[],int n)
{
int M = 1;
int ans = 0;
for(int i=1; i<=n; i++)
M *= m[i];
for(int i=1; i<=n; i++)
{
int x, y;
int Mi = M / m[i];
extend_Euclid(Mi, m[i], x, y);
ans = (ans + Mi * x * a[i]) % M;
}
if(ans < 0) ans += M;
return ans;
}
普通的中国剩余定理要求所有的
互素,那么如果不互素呢,怎么求解同余方程组?
这种情况就采用两两合并的思想,假设要合并如下两个方程
那么得到
在利用扩展欧几里得算法解出
的最小正整数解,再带入
得到
后合并为一个方程的结果为
这样一直合并下去,最终可以求得同余方程组的解。
原来文章地址:http://blog.csdn.net/acdreamers/article/details/8050018
相关文章推荐
- Python开发的10个小贴士
- C++ DLL导出函数的两种方法(导出序号那种方法,别人看不到函数名)
- firstChild,nextSibling,childNodes等属性的问题
- 【HTML】HTML详解——标签
- 判断number时最好用正则
- SimpleDateFormat和Locale.getDefault()的用法
- 进程序名得到进程ID和句柄与进程的公司名(使用快照和GetPeFileCompany和VerQueryValueW等函数)
- 在Linux上以服务的方式运行ASP.NET Core站点
- DialogFragment的使用与底层绘制
- 可以直接获取id对象
- vitamio5.x的简单使用
- 《精通nginx》的两个疑问
- 深度学习史上最全总结(文末有福利)
- ArrayDeque源码解析
- 由Android Toast 到 ThreadLocal的思考
- Android自定义统计图(柱状图,折线图,饼状图)
- c中printf的输出问题
- Flume1.7.0的TaildirSource介绍
- vim详细说明和配置
- 67. Add Binary