A*m+B*n=D问题的数学推导求解

本文介绍了一种解决A*m+B*n=D问题的方法,其中D是m和n的最大公因数。通过数学推导详细解释了算法步骤,并给出了具体的交换值算法。

    

       A*m+B*n=D问题的数学推导求解

流浪狗  2006.3

  正整数mn,求mn的最大公约数问题是一个算法入门的题目。但是要求解两个整数AB,使得A*m+B*n=DDm,n的最大公因数。求解最大公约数的问题可以表示如下:

1)            输入正整数m,n

2)            r=m%n;

3)            判断r是否等于0,如果等于0,则结束

4)            m=n;  n=r;转到(2

5)            输出n

  而要求解A*m+B*n=D的问题,令

    a'*m+b'*n=c,

    a*m+b*n=d

在程序运行过程中始终成立,则

1)            输入m,n

2)            a'=b=1,a=b'=0,c=m,d=n;

3)            q=c/d;r=c%d;

4)            判断r是否等于0,如果等于0,则结束

5)            交换值,怎样交换?转向(3

具体怎样交换呢?我们可以通过数学推倒来确定。

已知条件为

  ck1dk,

    dk1rk,

    rk+1=ck+1%dk+1

因为

  a’k*m+b’k*n=ck,

     ak*m+bk*n=dk

所以

  a’k1*m+b’k1*n=ck1dk= ak*m+bk*n

由于a’k1b’k1akbk都是整数,故有

a’k1ak;    b’k1=bk; ……………………………………….(1)

 

  ak1*m+bk1*ndk1rk= ck% dk= ck-q* dk

ak1*m+bk1*n=a’k*m+b’k*n-q*( ak*m+bk*n)

ak1*m+bk1*n=( a’k-q* ak)*m+( b’k-q* bk)

故有

   ak1= a’k-q* ak;    bk1= b’k-q* bk………………………..(2)

由(1)(2)可以得出第5步的具体算法:

 

   c=d; d=r;
   t=a’;
   a’=a;
   a=t-q*a;
   t=b’;
   b’=b;
   b=t-q*b;

 

from Crypto.Util.number import * n=1130559951242142418553461557920917245278152787036994964813122956739956040733223190585188299825937660853090732755660557900622564346469528239989519875434612493124663925800482373019421482927567375862528994310090666571233446002163478309309649223886467303834842172338454971591276606602163799133000582891965785243482166772793400065793927508012418516719549212969303944155066541587875789636798394581666621711612432864870236407912486149901575077993702841083287354610398446101725184000000000000000000000000000000149 e=65537 m=bytes_to_long(flag) def zhuanzhuan(n): if n < 2: return n return 9* zhuanzhuan(n - 1) + zhuanzhuan(n - 2) g = 1766592252951269548814352411327322447034194093921285273353477875204196603230641896039854934719468650093602325707751568 hint_0=zhuanzhuan(g)%50254221567892101225665855 def encrypt(hint_0): #n_1,n_2 both are int if (n_1+hint_0)**2+1712463104290490642*n_1+4730060142800357260761833404838169046987798-66666666*n_2**2=0: d=55607604802787651645008458776960381905274761803290637507632188635838921065681450951091689278291418693230528750002533602907652688436593464630306292523277204515196410606067221890882848225521819884919432609641732036959698443050773592482567332594684068998082886109352105201496925283866221090767083891241755981564899917062843679988341936588610298860835342859782896551931353504004447312763256966682142206683209406463516580194846276027818291321875085607298572702721743561*n_1+n_2-69462057634597116805075535702860983356198049 return d c=pow(m,e,n)=encrypt(hint_0) #The n is very dangerous 结果是多少
06-03
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值