乘法逆元 K Problem A

2022-05-06 22:36:09 字數 1815 閱讀 8264

幾個定理:  a/b=a*b的逆元

b^(c-1)%c=1

∴ b*b^(c-2)%c=1

∴ 1/b=b^(c-2)%c 

∴ a/b%9973=a*b^9971%9973;

乘法逆元的作用: 因為(a%c)/(b%c)!=(a/b)%c;

所以為了運算準確,有公式 (a/b)%c=a*b^(c-2)%c。

為了求b^(c-2),需要用到快速冪。

只有在除法運算中,(a%c)/(b%c)!=(a/b)%c,但是在乘法、加法、減法運算中,例如(a*b)%c==(a%c)*(b%c)%c  簡而言之,轉化乘法逆元也是這樣,將除法轉化為乘法,就可以多次取模來進行很大位數的運算。

題目:度熊手上有一本字典儲存了大量的單詞,有一次,他把所有單詞組成了乙個很長很長的字串。現在麻煩來了,他忘記了原來的字串都是什麼,神奇的是他竟然記得原來那些字串的雜湊值。乙個字串的雜湊值,由以下公式計算得到: h(

s)=∏

i=1i

≤len

(s)(

si−28

) (m

od9973

)'>h(s)=∏i≤len(s)i=1(si−28)(mod9973)si

'>h(

s)=∏

i=1i

≤len

(s)(

si−28

) (m

od9973

)'>s

i'>si

代表 s[i] 字元的 ascii 碼。 

請幫助度熊計算大字串中任意一段的雜湊值是多少。

input

多組測試資料,每組測試資料第一行是乙個正整數n

'>n

,代表詢問的次數,第二行乙個字串,代表題目中的大字串,接下來n

'>n

行,每行包含兩個正整數a

'>

a和b'>

b,代表詢問的起始位置以及終止位置。 1≤

n≤1,

000'>1≤n≤1,0001≤

len(

stri

ng)≤

100,

000'>1≤len(string)≤100,0001≤

a,b≤

len(

stri

ng)'>1≤a,b≤len(string)

output

對於每乙個詢問,輸出乙個整數值,代表大字串從 a

'>a

位到 b

'>b

位的子串的雜湊值。

sample input

2

acmlove2015

1 11

8 10

1testmessage

1 1

sample output
6891

9240

88

1 #include2 #include3 #include4 typedef long

long

ll;5

const

int maxn=1e5+10;6

#define mod 9973

7ll powmod(ll a,ll b)817

return ans%mod;

18}

19char

s[maxn];

20int

n,a,b;

21int

num[maxn];

22int

main()

2333

while(n--)

343839}

40return0;

41 }

乘法逆元及逆元求法

模運算 取餘運算,即a除以b得到的餘數,記為mod,又記為 模運算過程中,加減乘都可以先對a,b進行 p,然後再進行加減乘,最後再 p,結果不變 運算子優先順序,模運算和乘除法的運算子優先順序是一樣的 同餘 a和b除以p得到的餘數相同,即p可以整除 a b 求解 cfrac mod p 的值,因為除...

模板 乘法逆元

適用 求某乙個數在模意義下的乘法逆元。如果a p互質,那麼有ap a就是p的倍數,所以有ap a modp ap 1 1 modp 所以只要打乙個快速冪就ok了。code include using namespace std int n,p int power int x,int k return...

模板 乘法逆元

這是一道模板題 給定n,p求1 n中所有整數在模p意義下的乘法逆元。輸入格式 一行n,p 輸出格式 n行,第i行表示i在模p意義下的逆元。輸入樣例 1 複製10 13 輸出樣例 1 複製179 108112 534 1 n 3 106,n1 n 3 106,n輸入保證 p p p 為質數。先扔個線性...