給定a,b,c,a與c互質,求解ax≡b(mod c)的最小非負整數解。可能無解。
基本介紹
- 中文名:大步小步算法
- 外文名:BSGS(Baby Step Giant Step)
- 所屬學科:數論、計算機算法
定義
原理
- 把0到c-1按m= (上取整)分塊
- 把a0,a1,...,ammod c的值存到hash表中(或者存起來排好序)
- 如果x有解,x一定可以表示成i*m+j(0≤i,j≤m-1),從小到大枚舉i,ai*m+j=(am)i*aj,(am)i的值易求,(am)i*aj≡b(mod c)中aj mod c的值v可以用擴展歐幾里得來求,也可以根據歐拉定理得v=aφ(c)-i*m*b mod c,因為a與c互質,v的值只有一個
- 接著在hash表中(或有序數組中二分)找出最小的j使得aj mod c=v,如果找到則答案為i*m+j否則無解。