CINTA第二次作业

CINTA第二次作业

7.手动计算以下模m下a的乘法逆元。(a)m=11,a=5 (b)m=121,a=13
( c)m=1021,a=131
(a) [ 1 0 11 0 1 5 ] \begin{bmatrix} 1 & 0 & 11 \\ 0 & 1 & 5 \end{bmatrix} [1001115] [ 0 1 5 1 − 2 1 ] \begin{bmatrix} 0 & 1 & 5 \\ 1 & -2 & 1 \end{bmatrix} [011251]
所以a的乘法逆元是-2
(b) [ 1 0 121 0 1 13 ] \begin{bmatrix} 1 & 0 & 121 \\ 0 & 1 & 13 \end{bmatrix} [100112113] [ 0 1 13 1 − 9 4 ] \begin{bmatrix} 0 & 1 & 13 \\ 1 & -9 & 4 \end{bmatrix} [0119134] [ 1 − 9 4 − 3 28 1 ] \begin{bmatrix} 1 & -9 & 4 \\ -3 & 28 & 1 \end{bmatrix} [1392841]
所以a的乘法逆元为28
(c) [ 1 0 1021 0 1 131 ] \begin{bmatrix} 1 & 0 & 1021 \\ 0 & 1 & 131 \end{bmatrix} [10011021131] [ 0 1 131 1 − 8 − 27 ] \begin{bmatrix} 0 & 1 & 131 \\ 1 & -8 & -27 \end{bmatrix} [011813127] [ 1 − 8 − 27 5 − 39 − 4 ] \begin{bmatrix} 1 & -8 & -27 \\ 5 & -39 & -4 \end{bmatrix} [15839274] [ 5 − 39 − 4 − 34 265 1 ] \begin{bmatrix} 5 & -39 & -4 \\ -34 & 265 & 1 \end{bmatrix} [5343926541]
所以a的乘法逆元为265
8.编写c语言程序完成模指数运算,即给定整数x,y和m为输入,计算并返回xymod m
将模指数进行分治计算

#include <iostream>
#include<cmath>
using namespace std;
int ME(int x,int y,int m)
{
    int res=1;
    while(y)
    {
    	if(y&1)
    		res=(res*x)%m;
    		y>>=1;
    		x=x*x%m;
    }
    return res;
}

9.在这里插入图片描述
这是对矩阵的快速幂运算

#include<iostream>
using namespace std;
struct matrix{
    int a[2][2];
};
matrix multip(matrix a1,matrix a2)
{
    matrix temp;//中间变量,存储
    temp.a[0][0]=temp.a[1][0]=temp.a[0][1]=temp.a[1][1]=0;
    for(int i=1; i<=2; i++)
        for(int j=1; j<=2; j++)
            for(int k=1; k<=2; k++)
            {   //第i行乘以第j列的和
                temp.a[i][j]=temp.a[i][j]+a1.a[i][k]*a2.a[k][j];
            }
    return temp;
}
matrix qpow(int n,matrix a1)
{
    //传入n次幂
    matrix a2;
    while(n)
    {
        if(n&1)
            a2=multip(a2,a1);//n为奇数
        a1=multip(a1,a1);
        n>>=1;// n/=2
    }
    return a2;
   
}

在这里插入图片描述

运用反证法
假设给定互素的正整数c和m,存在整数值c-1不模m唯一
设a,b分别为c模m的逆元,ac≡bc≡1(mod m)
由定理得:m | c(a - b), 又因为 gcd(c, m) = 1, 所以 m | (a - b),即 a≡b(mod m)
说明a,b模m唯一,与假设矛盾
命题得证
11.编写一个 Python 程序计算乘法逆元,即输入互素的正整数 c 和 m,返回 c ,使得 cc−1 ≡ (mod m)。要求:只返回为正整数的 c−1

ddef ex_gcd(a, b): #扩展欧几里得算法    
    if b == 0:          
        return 1, 0, a     
    else:         
        x, y, gcd = ex_gcd(b, a % b) #需多递归一层用于判断        
        x, y = y, (x - (a // b) * y)        
        
        return x, y, gcd

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值