CINTA 作業三
CINTA 作業三
實現乘法逆元
LL egcd(LL a,LL b,LL &x,LL &y)
{
if(b==0)
{
x=1,y=0;
return a;
}
LL ret=egcd(b,a%b,y,x);
y-=a/b*x;
return ret;
}
LL getInv(int a,int mod)
{
LL x,y;
LL d=egcd(a,mod,x,y);
return d==1?(x%mod+mod)%mod:-1;
}
模指數運算
def rec_mod_exp(x, y, p):
if(y==0):
return 1
z = rec_mod_exp(x, y//2, p)
if(y&1==0):
return z*z %p
else:
return x*z*z %p
3、設p = 23和a = 3,使用費爾馬小定理計算 a 2019 m o d p ? a^{2019} modp? a2019modp?
計算
3
2019
m
o
d
23
3^{2019} mod 23
32019mod23使用費馬小定理
a
p
−
1
≡
1
m
o
d
p
a^{p-1}≡ 1 modp
ap−1≡1modp可得
a
22
≡
1
m
o
d
23
a^{22} ≡ 1 mod 23
a22≡1mod23,因為
2019
=
17
+
91
∗
22
2019=17+91*22
2019=17+91∗22,所以
3
2019
m
o
d
23
3^{2019} mod 23
32019mod23
=
3
17
+
91
∗
22
m
o
d
23
=3^{17+91*22} mod 23
=317+91∗22mod23,
所以
3
17
+
91
∗
22
m
o
d
23
3^{17+91*22} mod 23
317+91∗22mod23
=
3
17
m
o
d
23
=3^{17} mod 23
=317mod23
=
16
=16
=16
4、使用尤拉定理計算2^{100000} mod 55
因為55等於511,而5和11都為素數,故 ϕ \phi ϕ(55)=(5-1)*(11-1)=40,因為gcd(2,55)=1,又因為 2 100000 = 2 2500 ∗ 40 2^{100000}=2^{2500*40} 2100000=22500∗40,所以 2 100000 ≡ 1 m o d 55 = 1 2^{100000}≡1 mod 55 =1 2100000≡1mod55=1
5、手動計算7^{1000}的最後兩個數位等於什麼?
通過運算7的前幾次次方,發現其實後兩數位是按迴圈出現的,並且是以四個次方為一個迴圈,故 7 1000 7^{1000} 71000的最後兩個數位為 01 01 01
相關文章
- CINTA 作業七
- 作業三
- 【團隊作業】第三週作業1
- 第三週作業
- java小作業(三)Java
- 第三週 作業3
- PTA三次作業
- 第三週作業2
- 第三週 作業4
- Python第三週作業Python
- Javaweb第三週作業JavaWeb
- 第九組【團隊作業】第三週作業4
- 第六組【團隊作業】第三週作業4
- 第六組【團隊作業】第三週作業2
- 第五組【團隊作業】第三週作業1
- 第八組【團隊作業】第三週作業3
- 第八組【團隊作業】第三週作業1
- 第一組【團隊作業】第三週作業2
- 第七組【團隊作業】第三週作業4
- 第三次作業
- 第三組【團隊作業】第四周作業3
- 前三次作業總結
- 馬哥教育第三週作業
- 第三輪OOP作業總結OOP
- 2020-09-19 iptables作業(三)
- 作業系統基礎第三講作業系統
- 第三次部落格作業
- OOP第三次Blog作業OOP
- OPP前三次作業總結
- 前三次oo作業總結
- OOP前三次作業總結OOP
- 團隊作業sprint第三天
- java第三階段作業總結Java
- 【作業系統】複習薈萃(三)作業系統
- 厚基礎Linux——第三週作業Linux
- java第三次作業(1)Java
- 第三組【團隊作業】第二週使用者調研作業2
- 資料採集與融合術作業三