高次不定方程

2021-10-01 07:16:26 字數 1435 閱讀 3575

高次不定方程是指求解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。輸出格式 乙個整數,即不定方程的非負整數解組數。輸出時每行末尾的多餘空格,不影響答案正確性 樣例輸入...