CINTA6

1.

19 模 11 的乘法逆元是 7 , 19 ∗ 7 ≡ 1 m o d    11 19模11的乘法逆元是7,19*7\equiv1\mod 11 1911的乘法逆元是71971mod11
11 模 19 的乘法逆元是 7 , 11 ∗ 7 ≡ 1 m o d    19 11模19的乘法逆元是7,11*7\equiv1\mod 19 1119的乘法逆元是71171mod19
x=(8 * 7 * 19+3 * 7 * 11)%11*19=41

2.

693 模 5 的乘法逆元是 2 , 693 ∗ 2 ≡ 1 m o d    5 693模5的乘法逆元是2,693*2\equiv1\mod 5 6935的乘法逆元是269321mod5
495 模 7 的乘法逆元是 3 , 495 ∗ 3 ≡ 1 m o d    7 495模7的乘法逆元是3,495*3\equiv1\mod 7 4957的乘法逆元是349531mod7
385 模 9 的乘法逆元是 4 , 385 ∗ 4 ≡ 1 m o d    9 385模9的乘法逆元是4,385*4\equiv1\mod 9 3859的乘法逆元是438541mod9
315 模 11 的乘法逆元是 8 , 315 ∗ 8 ≡ 1 m o d    11 315模11的乘法逆元是8,315*8\equiv1\mod 11 31511的乘法逆元是831581mod11
x = 1 ∗ 693 ∗ 2 + 2 ∗ 3 ∗ 495 + 3 ∗ 4 ∗ 385 + 4 ∗ 315 ∗ 8 ( m o d    5 ∗ 7 ∗ 9 ∗ 11 ) = 1731 x=1*693*2+2*3*495+3*4*385+4*315*8(\mod 5*7*9*11)=1731 x=16932+23495+34385+43158(mod57911)=1731

3.

Z 221 ∗ = Z 13 ∗ Z 17 ∗ Z_{221}^*=Z_{13}^*Z_{17}^* Z221=Z13Z17
200 0 2019 m o d    221 = ( 200 0 2019 m o d    13 , 200 0 2019 m o d    17 ) 2000^{2019}\mod 221=(2000^{2019}\mod13,2000^{2019}\mod17) 20002019mod221=(20002019mod13,20002019mod17)
( 200 0 2019 m o d    13 , 200 0 2019 m o d    17 ) = ( 1 1 2019 m o d    13 , 1 1 2019 m o d    17 ) (2000^{2019}\mod13,2000^{2019}\mod17)=(11^{2019}\mod13,11^{2019}\mod17) (20002019mod13,20002019mod17)=(112019mod13,112019mod17)
( 1 1 2019 m o d    13 , 1 1 2019 m o d    17 ) = ( 1 1 3 m o d    13 , 1 1 3 m o d    17 ) (11^{2019}\mod13,11^{2019}\mod17)=(11^{3}\mod13,11^{3}\mod17) (112019mod13,112019mod17)=(113mod13,113mod17)
( 1 1 3 m o d    13 , 1 1 3 m o d    17 ) ) = ( 5 , 5 ) (11^{3}\mod13,11^{3}\mod17))=(5,5) (113mod13,113mod17))=(5,5)
x = 5 m o d    13 x=5\mod 13 x=5mod13
x = 5 m o d    17 x=5\mod 17 x=5mod17
x = 5 x=5 x=5
200 0 2019 m o d    221 = 5 2000^{2019}\mod 221=5 20002019mod221=5

7.

#include<stdio.h>

//返回a在模m下的逆元
int mul_inverse(int a,int m){
    int Matrix[2][3]={{1,0,a},{0,1,m}};
    while(Matrix[0][2]!=1){
        int times=Matrix[0][2]/Matrix[1][2],temp[3];
        for(int i=0;i<3;i++){
            temp[i]=Matrix[1][i];
            Matrix[1][i]=Matrix[0][i]-Matrix[1][i]*times;
            Matrix[0][i]=temp[i];
        }        
    }
    while(Matrix[0][0]<0){
        Matrix[0][0]+=m;
    }
    return Matrix[0][0];
}

int CRT(int a[],int p[],int n){
    int p_inverse[100];
    long long M=1;
    int ret=0;
    for(int i=0;i<n;i++){
        M*=p[i];
    }
    for(int i=0;i<n;i++){
        ret+=a[i]*M/p[i]*mul_inverse(M/p[i],p[i]);
        ret%=M;
    }
    return ret;
}

int main(){
    int a[]={1,2,3,4};
    int p[]={5,7,9,11};
    int n=4;
    printf("%d\n",CRT(a,p,n));
    return 0;
}
  • 31
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值