求某個數的逆元,我們可以用log(n)的時間算出來。
但是,如果是求1~n的所有逆元呢?是不是就要用nlog(n)的時間了?
其實我們有一種線性的方法,可以在O(n)的複雜度求出1~n的逆元。
先假設模數y=ax+b
則ax+b0 (%y)
將兩邊同時除以x·b (因爲你的目的是得到一個形式爲……的式子)
則式子變爲0
拆開得a·+0
-a·
因爲前面說了y=ax+b
所以a=,b=(y%x)
將此帶入,得:
-`(y%x)^-1
我們設f[i]表示i的逆元,
則f[i]=(-y/i*f[y%i])%y
按照這個式子遞推下去就可以得到1~n的逆元了。
當然也可以用遞歸的方式用log的時間求出n的逆元。