扩展欧几里德算法 C# 实现
/// <summary>
/// 计算私钥
/// </summary>
/// <param name="e">公钥(加密指数)</param>
/// <param name="l">n的欧拉数(p-1)*(q-1)</param>
/// <returns></returns>
/// <exception cref="ArgumentException"></exception>
public static BigInteger GetPrivate(BigInteger e, BigInteger l)
{
if (e > l)
{
throw new ArgumentException("e不能大于l");
}
var gcd = BigInteger.GreatestCommonDivisor(e, l);
if (gcd != 1)
{
throw new ArgumentException("e与l必须互质");
}
return GetInverse(e, l);
}
/// <summary>
/// 求逆元
/// </summary>
/// <param name="e">指数</param>
/// <param name="m">模</param>
/// <returns><paramref name="e"/> 在 <paramref name="m"/> 下的逆元,不存在逆元返回-1 </returns>
private static BigInteger GetInverse(BigInteger e, BigInteger m)
{
BigInteger x, y;
BigInteger d = Euclidean(e, m, ref x, ref y);
return d == 1 ? (x + m) % m : -1;
}
/// <summary>
/// 扩展欧几里得算法
/// </summary>
/// <param name="a"></param>
/// <param name="b"></param>
/// <param name="x"></param>
/// <param name="y"></param>
/// <returns></returns>
private static BigInteger Euclidean(BigInteger a, BigInteger b, ref BigInteger x, ref BigInteger y)
{
if (b == 0)
{
x = 1;
y = 0;
return a;
}
BigInteger ret = Euclidean(b, a % b, ref y, ref x);
y -= a / b * x;
return ret;
}
//参考资料:(11条消息) 逆元的求法总结(3种基本方法+4种实现)_星辰大少主的博客-CSDN博客_求逆元
扩展欧几里德算法 C# 实现相关推荐
- poj 2115 C Looooops(扩展欧几里德算法)
题意: 对于for(i=A ; i!=B ;i+=C)循环语句,问在k位存储系统中循环几次才会结束. 比如:当k=4时,存储的数 i 在0-15之间循环.(本题默认为无符号) 若在有限次内结束,则输出 ...
- 欧几里德与扩展欧几里德算法——密码学笔记(五)
一.欧几里德算法 又称辗转相除法,用于计算两个整数a,b的最大公约数. 基本算法:设a=qb+r,其中a,b,q,r都是整数,则gcd(a,b)=gcd(b,r),即gcd(a,b)=gcd(b,a% ...
- 欧几里德算法与扩展欧几里德算法
欧几里德算法 欧几里德算法又称辗转相除法,用于计算两个整数a,b的最大公约数. 基本算法:设a=qb+r,其中a,b,q,r都是整数,则gcd(a,b)=gcd(b,r),即gcd(a,b)=gcd( ...
- (扩展欧几里德算法)zzuoj 10402: C.机器人
10402: C.机器人 Description Dr. Kong 设计的机器人卡尔非常活泼,既能原地蹦,又能跳远.由于受软硬件设计所限,机器人卡尔只能定点跳远.若机器人站在(X,Y)位置,它可以原地 ...
- Bailian2793 孙子问题【扩展欧几里德算法+中国剩余定理】
2793:孙子问题 总时间限制: 15000ms 内存限制: 65536kB 描述 我国古代<孙子算经>中,记有如下算题:"今有物不知其数,三三数之剩二,五五数之剩三,七七数之剩 ...
- 欧几里德算法 扩展欧几里德算法 求解丢番图方程
欧几里德算法 即辗转相除法,计算整数A, B最大公约数. 基本算法:设 a = kb + r,其中a,b,k,r都是整数,则 gcd(a,b) = gcd(b,r),即 gcd(a,b) = gcd( ...
- 扩展欧几里德算法解决问题A:Jugs
Jugs codeup的Jugs题目需要使用扩展欧几里德算法解决: Zoj的jugs题目需要使用BFS算法解决: codeup的Jugs题目需要使用扩展欧几里德算法解决: 题目链接:http://co ...
- 青蛙的约会(POJ 1061 扩展欧几里德算法)
POJ 1061 青蛙的约会 扩展欧几里德算法简单介绍及应用 题目大意: 两只青蛙在网上相识了,它们聊得很开心,于是觉得很有必要见一面.它们很高兴地发现它们住在同一条纬度线上,于是它们约定各自朝西跳, ...
- 裴蜀定理与扩展欧几里德算法
裴蜀定理又称贝祖定理:对于给定的正整数a,b,方程ax+by=c有解的充要条件为c是gcd(a,b)的整数倍. 裴蜀定理的推广:方程ax+by+cz+-+nm=f(其中a,b,c-n,f为整数)有解的 ...
- 集训笔记---扩展欧几里德算法(POJ NO.1061 青蛙的约会 有点烦人小跳蛙gcd)
又在搬砖,本来以为这是一个追及问题,后来发现数据好像并不是那么个意思,后来把方程列出来,经过一个去模的操作,我们其实可以找到一点线索,那就是,一个经过变形的二元一次方程,那么在这种情况下,就可以利用扩 ...
最新文章
- Sencha Touch 2 DataView / List 分页
- opengl光照效果_【图形学基础 | Shader】Blinn-Phong 光照模型
- python定时发送邮件_Python3实现带附件的定时发送邮件功能
- SAP ERP物料和SAP Cloud for Customer的同步
- XmlPullParser
- Flutter 初尝:从 Java 无缝过渡,java开发面试笔试题
- 微软Power BI报表服务器学习总览
- sprintf函数打印数据不对_printf的归宿-数据打印到哪儿了
- android ListView和GridView拖拽移位具体实现及拓展
- FFmpeg解码音频代码
- 正确认识计算机专业,如何正确认识计算机科学与技术专业
- 方程检验格式图片_eviews的异方差检验ppt课件
- 肠道微生物会导致你变胖吗?
- Maya模型锁定不能编辑的解锁方法
- 数独问题每行每列每3X3
- airvideo_如何免费获取Android中的AirVideo功能
- guava-Primitives
- 函数声明放在头文件中,函数的定义放在实现文件中,然后在主函数中调用
- 关于单向TSP旅行商问题/修路问题/最小生成树问题的求解讨论
- Authentication和Authrization(下)