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

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

时间:2023-05-10 09:33:38浏览次数:29  
标签:old gcd temp int 欧几里得 密码 算法 ex GCD

任务详情

  1. 在openEuler(推荐)或Ubuntu或Windows(不推荐)中完成下面任务
  2. 参考《密码工程》p112伪代码实现ExtendedGCD(int a, int b, int *k, int *u, int *v)算法(5
  3. 在测试代码中计算74模167的逆。(5
  4. 自己设计至少两个测试代码。5
  5. 提交代码和运行结果截图

代码

代码一:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
struct EX_GCD {
    int s;
    int t;
    int gcd;
};
 
struct EX_GCD extended_euclidean(int a, int b) {
    struct EX_GCD ex_gcd;
    if (b == 0) { //b等于0时直接结束求解
        ex_gcd.s = 1;
        ex_gcd.t = 0;
        ex_gcd.gcd = 0;
        return ex_gcd;
    }
    int old_r = a, r = b;
    int old_s = 1, s = 0;
    int old_t = 0, t = 1;
    while (r != 0) { //按扩展欧几里得算法进行循环
        int q = old_r / r;
        int temp = old_r;
        old_r = r;
        r = temp - q * r;
        temp = old_s;
        old_s = s;
        s = temp - q * s;
        temp = old_t;
        old_t = t;
        t = temp - q * t;
    }
    ex_gcd.s = old_s;
    ex_gcd.t = old_t;
    ex_gcd.gcd = old_r;
    return ex_gcd;
    }
 
int main(void) {
    int a, b;
    printf("Please input two integers divided by a space.\n");
    scanf("%d%d", &a, &b);
    if (a < b) { //如果a小于b,则交换a和b以便后续求解
        int temp = a;
        a = b;
        b = temp;
    }
    struct EX_GCD solution = extended_euclidean(a, b);
    printf("%d*%d+%d*%d=%d\n", solution.s, a, solution.t, b, solution.gcd);
     
    return 0;
}
代码二
#include <stdio.h>

void ExtendedGCD(int a, int b, int *k, int *u, int *v) {
    if (b == 0) {
        *k = a;
        *u = 1;
        *v = 0;
    } else {
        ExtendedGCD(b, a % b, k, u, v);
        int temp = *u;
        *u = *v;
        *v = temp - (a / b) * (*v);
    }
}

int main() {
    int a = 1234;
    int b = 5678;
    int k, u, v;
    ExtendedGCD(a, b, &k, &u, &v);
    printf("GCD(%d, %d) = %d\n", a, b, k);
    printf("%d * %d + %d * %d = %d\n", a, u, b, v, k);
    return 0;
}

截图:
代码一的运行截图:

代码二的运行截图:

标签:old,gcd,temp,int,欧几里得,密码,算法,ex,GCD
From: https://www.cnblogs.com/gtgtgt/p/17387021.html

相关文章

  • 密码工程-扩展欧几里得算法
    密码工程-扩展欧几里得算法20201331黄文刚任务详情:0.在openEuler(推荐)或Ubuntu或Windows(不推荐)中完成下面任务参考《密码工程》p112伪代码实现ExtendedGCD(inta,intb,int*k,int*u,int*v)算法(5在测试代码中计算74模167的逆。(5自己设计至少两个测试代码。5提交代......
  • 密码工程—小素数
    一、任务详情在openEuler(推荐)或Ubuntu或Windows(不推荐)中完成下面任务参考《密码工程》p107伪代码基于Eratosthenes算法实现intSmallPrimeList(intn,int*plist,int*len),其中plist返回素数列表,len返回列表长度(5’)2写出测试代码,至少包括n=2,n=你的四位学号,n>2^2......
  • 密码工程-小素数
    在openEuler(推荐)或Ubuntu或Windows(不推荐)中完成下面任务参考《密码工程》p107伪代码基于Eratosthenes算法实现intSmallPrimeList(intn,int*plist,int*len),其中plist返回素数列表,len返回列表长度(10’)2写出测试代码,至少包括n=2,n=你的四位学号,n>2^20次方的测试代......
  • 密码工程-小素数
    密码工程-小素数0.在openEuler(推荐)或Ubuntu或Windows(不推荐)中完成下面任务1.参考《密码工程》p107伪代码基于Eratosthenes算法实现intSmallPrimeList(intn,int*plist,int*len),其中plist返回素数列表,len返回列表长度(5’)2写出测试代码,至少包括n=2,n=你的四位......
  • 可变策略的拟人式三维装箱算法实现-开源
    问题给定一个长方体容器和较多不同形态的长方体货物,需确定装箱策略,使货物尽可能多地装填到容器中。假设与约束1、货物可向上码放;2、货物必须完全包含在容器中;3、任意两个货物内的任意一点不可在空间中的同一位置;4、货物不可悬空放置,即货物下方必须有其他货物或容器底部支撑;5、......
  • 密码工程-小素数
    在openEuler(推荐)或Ubuntu或Windows(不推荐)中完成下面任务参考《密码工程》p107伪代码基于Eratosthenes算法实现intSmallPrimeList(intn,int*plist,int*len),其中plist返回素数列表,len返回列表长度(5’)2写出测试代码,至少包括n=2,n=你的四位学号,n>2^20次方的测试代......
  • 密码工程-小素数
    任务详情0.在openEuler(推荐)或Ubuntu或Windows(不推荐)中完成下面任务1.参考《密码工程》p107伪代码基于Eratosthenes算法实现intSmallPrimeList(intn,int*plist,int*len),其中plist返回素数列表,len返回列表长度(5’)2写出测试代码,至少包括n=2,n=你的四位学号,n>2......
  • 代码随想录算法训练营第七天 | 454.四数相加II 、383.赎金信 
    ......
  • 国密算法环境配置
    国密算法环境配置参考链接openssl配置:https://blog.csdn.net/bruce135lee/article/details/81811403openssl命令:https://www.cnblogs.com/rocedu/p/14891816.html#opensslgmssl-tasslgmssl配置:https://blog.csdn.net/zyhse/article/details/112350363......
  • 算法学习day09字符串part02-28、459--待办
    packageLeetCode.stringpart02;/***28.找出字符串中第一个匹配项的下标*给你两个字符串haystack和needle,请你在haystack字符串中找出needle字符串的第一个匹配项的下标(下标从0开始)。*如果needle不是haystack的一部分,则返回-1。*实例:*输入:hayst......