中国剩余定理
2015-11-14 14:09
155 查看
本人用三元组存储数据,求逆元。一共有k个同余式组,Ni为m1 * m2 * … mi .i=1,2,…,k-1.
N_Op 为Ni的逆元。
用递归算法实现定理:
Xi = [X(i-1) + N(i-1) * ( N_Op * ( B(i) - X(i-1) )(mod Mi) ](mod m1*m2*…*mi)
i=2,3,……,k
头文件:head.h
中国剩余定理.cpp
N_Op 为Ni的逆元。
用递归算法实现定理:
Xi = [X(i-1) + N(i-1) * ( N_Op * ( B(i) - X(i-1) )(mod Mi) ](mod m1*m2*…*mi)
i=2,3,……,k
头文件:head.h
#include<iostream> using namespace std; //三元组gcd(a,b) == ax +by == d; struct gcdstruct { int d; int x; int y; }; gcdstruct EXTENDED_EUCLID(int a,int b) { gcdstruct aa,bb; if(b==0) { aa.d = a; aa.x = 1; aa.y = 0; return aa; } else { bb = EXTENDED_EUCLID(b,a%b); aa.d = bb.d; aa.x = bb.y; aa.y = bb.x - bb.y * (a/b); } return aa; } /* Description: ax == 1 (mod m),求x */ int Inverse(int a,int m) //求逆元 { gcdstruct aa; aa = EXTENDED_EUCLID(a,m); while(aa.x<0) //为了让输出为正数 { aa.x +=m; } return aa.x; } int Mod(int a,int b) //求模 { while(a<0) { a +=b; } return a%b; } int GetNi(int *m,int n) //获得Ni { int N=1; for(int i=0;i<n;i++) { N *=m[i]; } return N; } int Result(int * b,int * m,int n ) //获得同余式组的解,n为第i个同余式 { if(n==1) { int x1=Mod( b[n-1] , m[n-1] ); return x1; } else { int N=GetNi(m,n-1); int N_Op =Inverse(N,m[n-1]); //N(n-1)的逆元为N(n-1)与m 的逆元, int xi_1=Result(b,m,n-1); int xi=Mod( xi_1 + N*( Mod( N_Op*(b[n-1] - xi_1),m[n-1]) ), GetNi(m,n) ) ; return xi; } }
中国剩余定理.cpp
#include"head.h" int main() { int n; cout<<"请输入同余式组的个数n="; cin>>n; int * b=new int ; int * m=new int ; cout<<"请输入同余式组的bi和mi:"<<endl; for(int i=1;i<=n;i++) { cout<<"b"<<i<<"="; cin>>b[i-1]; cout<<"m"<<i<<"="; cin>>m[i-1]; } int x=Result(b,m,n); cout<<"同余式组的解为:"<<x<<endl; }
相关文章推荐
- [转]如何在七天内完成游戏原型
- Spring4配置需要的jar包(Spring4.1.2)
- poj3928 树状数组应用
- Spring Boot快速入门之Hello World
- [No000043]学习Linux操作系统必备基础知识
- 原生JS表格行拖动排序,添加了回调功能
- LeetCode72——Edit Distance
- 思科路由器交换机自动化安全配置核查脚本
- FILTER NESTLOOP 中驱动表问题
- libxml2常用函数
- Cloud 9 Adapt Project on Heroku (Week V)
- 关于ViewPager中添加各个Fragment以及设置其中的组件监听器方法
- 蒟蒻的数位DP专题总结
- Activity最佳的实践
- Python4周 入职培训的过程
- Zabbix-分布式监控系统安装
- sql server 2008 数据库的完整性约束
- 数据库——三大范式
- Uva 1600 满足条件的最短路
- 集合数据在客户端和服务器端以json串形式传递