读初等数论小节(线性同余方程)
2011-06-05 12:27
176 查看
#include<iostream> using namespace std; /***************************************************************************/ |定理: 设a,b,m是整数, m>0, gcd(a,m)=d,若b%d!=0则无解, 若b%d=0,则ax==b(mod m) |恰有 d 个模m的不同余的解 算法过程: 先转化为ax-my=b,根据线性丢番图定理, 求出 |可能特解x0, y0; x=x0*b/d,再由 x = x0 + (m/d)*t {t->(0, d-1)} /***************************************************************************/ //扩展欧几里得求 gcd(a,b)和特解 x0 int ex_gcd(int a, int b, int & x, int & y) { if(b==0) {x = 1; y = 0; return a;} int d = ex_gcd(b, a%b, x, y); int t = x; x = y; y = t - a/b*y; return d; } //线性同余方程 求出d-1 个可行解 bool liner_mod_equation(int a, int b, int m) { int x, y; int d = ex_gcd(a, m, x, y); if(b%d!=0) return false; x = x*(b/d)%m; for(int i=0; i<d; i++) printf("%d ", x + m/d*i); return true; } int main() { int a, b, m; while(scanf("%d%d%d", &a, &b, &m)!=EOF) { if(a==0) break; if(liner_mod_equation(a, b, m)) printf("/n"); else printf("no answer/n"); } return 0; }
相关文章推荐
- 【初等数论】 05 - 指数和原根
- 初等数论四大定理之——费马小定理
- 初等数论学习
- 夜深人静写算法(五)- 初等数论
- 【初等数论】 06 - 不定方程
- 初等数论笔记
- 《数论》3.6习题3------求一元线性同余方程所有解(不是方程组)基础练习例子&&求逆元
- 初等数论四大定理(威尔逊定理,欧拉定理,中国剩余定理,费马小定理)
- 初等数论_4 2016.4.4
- 初等数论中的欧拉公式
- 洛谷2312:解方程(初等数论)
- 初等数论总结(填坑)
- 20140911 【 初等数论 】 51nod 1242 . 斐波那契数列的第N项
- CDU集训代码:初等数论
- 【算法】 初等数论 一些总结
- 20140911 【 初等数论 】 51nod 1113 . 矩阵快速幂
- 数论小节
- 初等数论四大基本定理
- 算法导论-----数论-----初等数论的概念
- 【转】初等数论 ——原根、指标及其应用