hdu 1573 X问题(一元线性同余方程组)
2017-11-11 19:28
525 查看
当中国剩余定理中的那些模数不互质的时候怎么解?就像解普通方程组一样,迭代求解同余方程组。思路很简单。过两天重新写个,换掉这个抄来的模板。
可以看这里的讲解:http://972169909-qq-com.iteye.com/blog/1266328
《初等数论及其应用》(原书第六版)119页也有个例子。
代码是直接拿的模板,改都没改
:http://blog.csdn.net/discreeter/article/details/70318677
可以看这里的讲解:http://972169909-qq-com.iteye.com/blog/1266328
《初等数论及其应用》(原书第六版)119页也有个例子。
代码是直接拿的模板,改都没改
:http://blog.csdn.net/discreeter/article/details/70318677
#include <bits/stdc++.h> using namespace std; typedef long long ll; const int N = 110, INF = 0x3f3f3f3f; int M , R ; int gcd(int a, int b) { return !b ? a : gcd(b, a%b); } int extgcd(int a, int b, int &x, int &y) { int d = a; if(b) { d = extgcd(b, a%b, y, x); y -= (a/b) * x; } else x = 1, y = 0; return d; } int linear_congruence(int M[], int R[], int n, int num) { int m = M[1], r = R[1]; int x, y, flag = 1; for(int i = 2; i <= n; i++) { int d = gcd(m, M[i]), c = R[i] - r; if(c % d != 0) { flag = 0; break; } extgcd(m/d, M[i]/d, x, y); int tm = M[i] / d; x = ((c/d * x) % tm + tm) % tm; r = r + x*m; m = m/d * M[i]; r %= m; } int ans = 0; if(num < r || flag == 0) ans = 0; else ans = (num - r)/m + 1; if(ans != 0 && r == 0) ans--; return ans; } int main() { int t, n, m; scanf("%d", &t); while(t--) { scanf("%d%d", &n, &m); for(int i = 1; i <= m; i++) scanf("%d", &M[i]); for(int i = 1; i <= m; i++) scanf("%d", &R[i]); printf("%d\n", linear_congruence(M, R, m, n)); } return 0; }
相关文章推荐
- HDU 1573 X问题(一元线性同余方程组)
- HDU - 1573 - X问题 - (解线性同余方程)
- HDU 1573 X问题 线性同余方程组模板
- hdu 1573 X问题(线性同余方程)
- 带提交: hdu 1573 X问题(一元同余方程组)
- HDU - 1573 X问题 一元线性同余方程组
- HDU 1573 X问题 [一元线性同余方程组]【数论】
- hdu 1573: X问题(线性同余方程组求正整数解的个数)
- HDU 1573 X问题
- hdu 1573 X问题
- hdu——1573—— X问题
- HDU 1573 X问题(中国剩余定理)
- HDU 1573 X问题 同余方程 竟然wa在条件 答案是正整数上。。无语
- HDU 1573 X问题(数论)
- hdu 1573 X问题 (中国剩余定理)
- HDU 1573 X的问题(模线性方程组)
- hdu 1573 X问题
- HDU 1573 X问题 中国剩余定理
- hdu 1573 X问题(中国剩余定理应用)
- HDU 1573 X问题 求同余方程组解的个数