一、BackGroud

在RSA密码体系中,欧几里得算法是加密或解密运算的重要组成部分。它的基本运算过程就是解 x*a=1(mod n) 这种方程。

二、The Problem

整个解的过程是这样的,我们用一个例子来说明。
当a=1001 ,n=3837时
方程为 x * 1001 = 1 (mod 3837)

求解过程:

3837 = 3 * 1001 + 834
1001 = 1 * 834 + 167
834 = 4 * 167 + 166
167 = 166 + 1

所以

1 = 167 - 166
= 167 - (834 - 4 * 167)
= 5 * 167 - 834
= 5 *(1001 - 834) - 834
= 5 * 1001 - 6 *834
= 5 * 1001 - 6 * (3837 -3 *1001)
= 23 * 1001 - 6 *3837

然后对等式两端同时除以模3837得

23 * 1001 = 1 (mod 3837)
于是 x = 23
现在给出a和n,你能不能在最短的时间内解出这个方程呢?

三、输入

输入包括多组测试数据。每组测试数据对应输入的一行,每行包括两个整数a和n。1<a,n<2^31(用long可以存下)
当a=n=0时输入结束,这组数据不包括在需要计算的数据中。

四、输出

对应每组输入数据,输出最小的满足题意的解x。
注意:本题用搜索是不可能做出来的,所以…

五、样例输入

1001 3837
136468984 134548555
0 0

六、样例输出

23
112206854

七、源代码

#include<stdio.h>
int d,x,y;
void extend_euclid(int a,int b)
{if(b==0){d=a;x=1;y=0;}else{extend_euclid(b,a%b);int temp=x;x=y;y=temp-a/b*y;}
}
int main()
{int n,m;while(scanf("%d%d",&n,&m)==2&&(n||m)){if(n>m)n%=m;extend_euclid(m,n);if(y<0)printf("%d\n",y+m);elseprintf("%d\n",y); }return 0;
}

算法题:SOJ1092: 欧几里得算法相关推荐

  1. php 辗转相除法,手撸golang 基本数据结构与算法 最大公约数 欧几里得算法/辗转相除法...

    手撸golang 基本数据结构与算法 最大公约数 欧几里得算法/辗转相除法 缘起 最近阅读<>([日]石田保辉:宫崎修一) 本系列笔记拟采用golang练习之 欧几里得算法欧几里得算法(又 ...

  2. 【离散数学中的数据结构与算法】二 欧几里得算法与裴蜀等式

    欧几里得算法是计算两个数最大公因子算法.又称辗转相除法.本文将学习为什么辗转相除法可以求得两个数的最大公因子.同时也可以根据最大公因子计算两个数的最小公倍数. 文章目录 1 欧几里得算法的理论基础 1 ...

  3. java实现rsa欧几里得算法求d_RSA算法中利用欧几里得算法求d详细过程

    文章转自新浪博客@任家 正文: RSA是第一个也是使用的最广泛的公钥加密算法,在1978年由R.Rivest.AdiShamir和Adleman三人发明, 并以他们的名字命名.RSA算法的安全性基于大 ...

  4. 【算法学习】欧几里得算法详解(包括扩展、同余方程)

    欧几里得算法详解(包括扩展.同余方程) 1.普通欧几里得算法(求最大公约数) 2.扩展欧几里得算法(求解a*x+b*y=c中(x,y)) 3.同余方程 1.普通欧几里得算法(求最大公约数) 欧几里得算 ...

  5. 如何利用扩展欧几里得算法求解不定方程_客户端不用的算法系列:从头条笔试题认识扩展欧几里得算法...

    难度较高,阅读时间大概 28 分钟 这是数论的第二篇,在<素数筛法>中,我们重温了素数这个数学定义,并且给出了区别于教科书上更高效的 Eratosthenes 筛法和欧拉线性筛.这篇文会从 ...

  6. 贫乏却最美好的三段论和神奇而不太严格的欧几里得算法-逻辑与算法之六

    贫乏却最美好的三段论和神奇而不太严格的欧几里得算法- 逻辑与算法之六 三段论是没有数字计算的推理,虽然如有些学者所言,这个来自希腊语的术语"三段论"本身就有计算的涵义.但希腊语的这 ...

  7. 密码学基础算法(一)基于整数的欧几里得算法和扩展欧几里得算法

    图片来源: 随便谷歌的一个图片 图片地址: https://jason-chen-1992.weebly.com/uploads/1/0/8/5/108557741/euclidean_3_orig. ...

  8. 欧几里得扩展欧几里得算法及相关的数学证明

    //欧几里得算法求最大公约数 int gcd(int m,int n) {int u0=m,u1=n,t;if( u0<u1 )// 保证u0>=u1u0^=u1,u1^=u0,u0^=u ...

  9. 欧几里得与扩展欧几里得算法

    原博客:https://www.cnblogs.com/haveyoueverbeen/p/4612753.html 关于扩展欧几里得算法(Extended Euclidean Algorithm), ...

最新文章

  1. 初步了解超图两种3D客户端 - iClient3D for_WebGL 和 iClient3D for_Plugin
  2. php scrscriptipt,XSS挑战之旅闯关笔记
  3. JS对以对象组成的数组去重
  4. NET 对象生命周期
  5. Linux学习-RPM 软件管理程序: rpm
  6. 基于JAVA+SpringMVC+Mybatis+MYSQL的网上二手车交易系统
  7. Vue.js 服务器端渲染指南
  8. linux下 Tomcat 端口号修改
  9. spring事务源码执行过程分析
  10. 【秋招毕业】自由奔赴的行者2021年终总结
  11. 性能测试方案(计划)模板
  12. deepinv2 添加打印机_科学网-Deepin Linux虚拟PDF打印机的安装与妙用-黄健的博文
  13. Tools - UML绘图工具
  14. Gson解析json数据
  15. 苹果手机备份数据到电脑什么位置 iPhone备份到电脑上的东西在哪里
  16. 利用Python进行数据分析笔记-pandas建模(statsmodels篇)
  17. iOS annotation
  18. IC卡·一卡一密加密 动态数据防伪方案实现
  19. 浪潮存储中标中国天眼;华为发布离网去油综合供能全系列解决方案;罗克韦尔自动化推出新品牌 | 全球TMT...
  20. 2016年关总结 让爱更有力量

热门文章

  1. [LBS学习笔记4]地理特征POI、AOI、路径轨迹
  2. Keras,今天7岁啦
  3. Web3 是什么?为何应该关注?
  4. 一种锂电池充电器的设计方案(使用LM317)
  5. 导出数据库表信息生成Word文档
  6. Java基于Redis实现“附近的人”(含源码下载)
  7. Codeforces Round #827 (Div. 4) D - F
  8. 吴恩达机器学习神经网络 8-1非线性假设
  9. 动态设置根节点字体大小
  10. 基于Echarts实现可视化数据大屏大数据平台车辆监控系统HTML模板