高次不定方程是指求解ax≡
b(mo
da^x≡b(mod
ax≡b(m
odc )c)
c),這一類的方程組,在這裡我們只研究a
aa與c
cc互質的情況。
首先,我們需要知道a
xa^x
ax在模c
cc的意義下具有週期性,並且最大的週期不超過ccc。
b sg
sbsgs
bsgs
演算法是用來解決高次不定方程的神奇演算法,可以將本身o(c
)o(c)
o(c)
的暴力優化到o(n
)o(\sqrt n)
o(n)。
首先我們可以將c
cc個可能的解分為n=c
n=\sqrt c
n=c
組,那麼每一組的大小為m=c
nm=\frac
m=nc
。那麼我們就可以將原式改寫為:
a im
−y≡b
(mod
a^≡b(mod
aim−y≡
b(modc)
c)c)
1 ≤i
≤n
1 \leq i \leq n
1≤i≤n,0≤y
<
m0 \leq y < m
0≤ya im
≡bay
(mod
a^≡ba^y(mod
aim≡ba
y(modc)
c)c)
這樣我們將右側的bay
ba^y
bay存入map
mapma
p中,再o(n
)o(n)
o(n)
的列舉aim
a^ai
m的值,判斷是否相等即可,這樣我們就將列舉的複雜度變為o(c
)o(\sqrt c)
o(c)。
下面給出演算法**:
題目:luo
gu
3846
luogu3846
luogu3
846
#include
#include
#include
using
namespace std;
#define ll long long
int cnt;
ll a,b,c;
mapint>mp;
ll qpow
(ll x,ll y)
return mul;
}int
main()
printf
("no solution\n");
return0;
}
不定方程求解
不定方程ax by c,對於給定的係數a和b 常數項c,求出在區間p q範圍內方程的乙個整數解x y,滿足x和y不全為0且x取值最大。題目保證a b c x y p q都是 10000 10000範圍之內的整數。輸入分為兩部分,第一部分是三個整數a b c且a b不為0,第二部分包含多組輸入,每組輸...
4139 不定方程求解
總時間限制 1000ms 記憶體限制 65536kb 描述給定正整數a,b,c。求不定方程 ax by c 關於未知數x和y的所有非負整數解組數。輸入一行,包含三個正整數a,b,c,兩個整數之間用單個空格隔開。每個數均不大於1000。輸出乙個整數,即不定方程的非負整數解組數。樣例輸入 2 3 18 ...
不定方程求解 列舉
小蒜給定正整數 a,b,c。求不定方程 ax by c 關於未知數 x 和 y 的所有非負整數解組數。輸入格式 一行,包含三個正整數 a,b,c,兩個整數之間用單個空格隔開。每個數均不大於 1000。輸出格式 乙個整數,即不定方程的非負整數解組數。輸出時每行末尾的多餘空格,不影響答案正確性 樣例輸入...