首页 > 编程语言 >密码工程-扩展欧几里得算法

密码工程-扩展欧几里得算法

时间:2024-06-06 15:21:54浏览次数:29  
标签:return gcd int 欧几里得 密码 算法 printf y1 ExtendedGCD

任务要求

  1. 在openEuler(推荐)或Ubuntu或Windows(不推荐)中完成下面任务,要用git记录实现过程,git commit不能低于5次
  2. 严格按照《密码工程》p112伪代码实现ExtendedGCD(int a, int b, int *k, int *u, int *v)算法(10')
    2.根据ExtendedGCD 实现计算有限域模除的函数int ModDiv(int a, int b, int m) ,返回a/b%m(3‘)
  3. 在测试代码中计算5/ 2% 13。自己再设计至少两个类似测试代码。(2’)
  4. 提交代码和运行结果截图,git log截图
  5. 提交使用Markdown并转为pdf格式,或者使用doc、docx格式

任务内容

1、extendedgcd.c

点击查看代码
#include <stdio.h>  
  
// 函数原型  
int ExtendedGCD(int a, int b, int *k, int *u, int *v);  
  
int main() {  
    int a, b, gcd, u, v;  
    printf("Enter two integers a and b: ");  
    scanf("%d %d", &a, &b);  
  
    gcd = ExtendedGCD(a, b, &u, &v, NULL);  
  
    printf("gcd(%d, %d) = %d\n", a, b, gcd);  
    printf("u = %d, v = %d\n", u, v);  
  
    return 0;  
}  
  
// Extended GCD 实现  
int ExtendedGCD(int a, int b, int *k, int *u, int *v) {  
    if (b == 0) {  
        *k = a;  
        *u = 1;  
        *v = 0;  
        return a;  
    }  
  
    int x, y, gcd;  
    gcd = ExtendedGCD(b, a % b, &x, &y, NULL);  
  
    *u = y;  
    *v = x - (a / b) * y;  
      
    if (k != NULL) {  
        *k = gcd;  
    }  
  
    return gcd;  
}
2、moddiv.c
点击查看代码
#include <stdio.h>  
  
// 扩展欧几里得算法  
int ExtendedGCD(int a, int b, int *x, int *y);  
  
// 计算模逆元  
int ModInverse(int a, int m) {  
    int x, y;  
    int g = ExtendedGCD(a, m, &x, &y);  
    if (g != 1) {  
        // 如果gcd(a, m)不为1,则a没有模逆元  
        return -1;  
    } else {  
        // 将x转换为正数  
        x = (x % m + m) % m;  
        return x;  
    }  
}  
  
// 计算有限域中的除法  
int ModDiv(int a, int b, int m) {  
    int inv = ModInverse(b, m);  
    if (inv == -1) {  
        // 如果没有模逆元,返回错误代码或抛出异常  
        printf("b has no modular inverse.\n");  
        return -1;  
    }  
    return (a * inv) % m;  
}  
  
// 扩展欧几里得算法实现  
int ExtendedGCD(int a, int b, int *x, int *y) {  
    if (b == 0) {  
        *x = 1;  
        *y = 0;  
        return a;  
    }  
    int x1, y1;  
    int gcd = ExtendedGCD(b, a % b, &x1, &y1);  
    *x = y1;  
    *y = x1 - (a / b) * y1;  
    return gcd;  
}  
  
int main() {  
    int a, b, m, result;  
    printf("Enter a, b, and m: ");  
    scanf("%d %d %d", &a, &b, &m);  
  
    result = ModDiv(a, b, m);  
    if (result != -1) {  
        printf("(%d / %d) %% %d = %d\n", a, b, m, result);  
    }  
  
    return 0;  
}
3、运行结果

image

标签:return,gcd,int,欧几里得,密码,算法,printf,y1,ExtendedGCD
From: https://www.cnblogs.com/GJH6/p/18235064

相关文章

  • Astar路径规划算法复现-python实现
    #-*-coding:utf-8-*-"""CreatedonFriMay2409:04:232024"""importosimportsysimportmathimportheapqimportmatplotlib.pyplotaspltimporttime'''传统A*算法'''classAstar:......
  • FPGA数字信号处理之:小波变换算法的实现
    一、定义        小波变换(wavelettransform,WT)是一种新的变换分析方法,它继承和发展了短时傅立叶变换局部化的思想,同时又克服了窗口大小不随频率变化等缺点,能够提供一个随频率改变的“时间-频率”窗口,是进行信号时频分析和处理的理想工具。它的主要特点是通过变换能够......
  • ISS空间转录组的细胞分割算法汇总(stardist、cellpose、QuPath、SCS)
    作者,EvilGenius我们来了解一下关于HE图片细胞分割的一些算法,以备后续的使用我们在做Xenium或者其他ISS技术的数据时候,通常都要获得一个polygons文件,直译过来就是多边形文件,其实就是我们进行的图像细胞分割文件。其实ISS技术由来已久,不过现在由于10Xxenium的发布,对于空间原......
  • 算法金 | 再见!!!KNN
    大侠幸会,在下全网同名「算法金」0基础转AI上岸,多个算法赛Top「日更万日,让更多人享受智能乐趣」KNN算法的工作原理简单直观,易于理解和实现,这使得它在各种应用场景中备受青睐。我们将深入探讨KNN算法,从基本概念到实现细节,从算法优化到实际应用,我们都会一一展开。通过本......
  • 6大部分,20 个机器学习算法全面汇总!!建议收藏!(上篇)
    ..........纯  干  货 ........本次文章分别从下面6个方面,涉及到20个算法知识点:监督学习算法无监督学习算法半监督学习算法强化学习算法集成学习算法深度学习算法监督学习算法监督学习算法是一种通过学习输入数据和相应的标签之间的......
  • 6大部分,20 个机器学习算法全面汇总!!建议收藏!(下篇)
    ...........纯 干 货...目录半监督学习算法1、标签传播基本原理核心公式2、自训练基本原理核心公式强化学习算法1、Q-Learning基本原理核心公式2、深度强化学习基本原理核心公式集成学习算法1、随机森林基本原理核心步骤2、梯度提......
  • 社交软件红包技术解密(十三):微信团队首次揭秘微信红包算法,为何你抢到的是0.01元
    本文由腾讯梁中原分享,原题“红包算法揭秘!哪段代码让你只抢了0.01元?”,下文进行了排版和内容优化等。1、引言在上一篇《来看看微信十年前的IM消息收发架构,你做到了吗》的文章中,有用户提到想了解自己每次微信红包只能抽中0.01元的反向手气最佳是怎么在技术上实现的,于是就有了本......
  • 基于粒子群算法优化Kmeans聚类的居民用电行为分析研究(Matlb代码实现)
     ......
  • 【PB案例学习笔记】-03用户名密码校验
    写在前面这是PB案例学习笔记系列文章的第3篇,该系列文章适合具有一定PB基础的读者。通过一个个由浅入深的编程实战案例学习,提高编程技巧,以保证小伙伴们能应付公司的各种开发需求。文章中设计到的源码,小凡都上传到了gitee代码仓库https://gitee.com/xiezhr/pb-project-example.gi......
  • 代码随想录算法训练营第一天| 704. 二分查找、27. 移除元素(数组)
    第一次打卡,记录还不够充分,会慢慢丰富起来一、二分查找题目链接:704.二分查找-力扣(LeetCode)讲解链接:Carl讲解视频讲解:代码随想录讲解 情况1:左闭右闭区间情况2:左闭右开区间 二、移除元素题目链接:27.移除元素-力扣(LeetCode)讲解链接:Carl讲解视频讲解:代码随想......