CINTA 作業三

HHHHUIIII發表於2020-09-29

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 ap11modp可得 a 22 ≡ 1 m o d 23 a^{22} ≡ 1 mod 23 a221mod23,因為 2019 = 17 + 91 ∗ 22 2019=17+91*22 2019=17+9122,所以 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+9122mod23
所以 3 17 + 91 ∗ 22 m o d 23 3^{17+91*22} mod 23 317+9122mod23 = 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=2250040,所以 2 100000 ≡ 1 m o d 55 = 1 2^{100000}≡1 mod 55 =1 21000001mod55=1

5、手動計算7^{1000}的最後兩個數位等於什麼?

通過運算7的前幾次次方,發現其實後兩數位是按迴圈出現的,並且是以四個次方為一個迴圈,故 7 1000 7^{1000} 71000的最後兩個數位為 01 01 01

相關文章