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 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

©️2020 CSDN 皮肤主题: 深蓝海洋 设计师:CSDN官方博客 返回首页