辗转相除+中国剩余定理含代码Word下载.docx

上传人:b****3 文档编号:7036337 上传时间:2023-05-07 格式:DOCX 页数:11 大小:140.72KB
下载 相关 举报
辗转相除+中国剩余定理含代码Word下载.docx_第1页
第1页 / 共11页
辗转相除+中国剩余定理含代码Word下载.docx_第2页
第2页 / 共11页
辗转相除+中国剩余定理含代码Word下载.docx_第3页
第3页 / 共11页
辗转相除+中国剩余定理含代码Word下载.docx_第4页
第4页 / 共11页
辗转相除+中国剩余定理含代码Word下载.docx_第5页
第5页 / 共11页
辗转相除+中国剩余定理含代码Word下载.docx_第6页
第6页 / 共11页
辗转相除+中国剩余定理含代码Word下载.docx_第7页
第7页 / 共11页
辗转相除+中国剩余定理含代码Word下载.docx_第8页
第8页 / 共11页
辗转相除+中国剩余定理含代码Word下载.docx_第9页
第9页 / 共11页
辗转相除+中国剩余定理含代码Word下载.docx_第10页
第10页 / 共11页
辗转相除+中国剩余定理含代码Word下载.docx_第11页
第11页 / 共11页
亲,该文档总共11页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

辗转相除+中国剩余定理含代码Word下载.docx

《辗转相除+中国剩余定理含代码Word下载.docx》由会员分享,可在线阅读,更多相关《辗转相除+中国剩余定理含代码Word下载.docx(11页珍藏版)》请在冰点文库上搜索。

辗转相除+中国剩余定理含代码Word下载.docx

实验要求:

(1).利用欧几里得算法求解两个数的最大公约数。

(2).利用欧几里得算法求解两个数的最小公倍数。

(3).利用中国剩余定理求解线性同余方程组

2实验环境和工具

MicrosoftVisualC++

3实验结果

3.1求逆算法的流程图

开场

a,m互质?

aa’≡1(modm)

求a’流程图。

t2=1;

t1=0;

m|a?

q=a/m;

t1-=q*t2;

a%=m;

swap(t1,t2);

swap(a,m);

输入a,m

输出t2〔即a’〕

完毕

N

Y

3.2程序核心代码

#include<

iostream>

#defineLL__int64

#definelen100

usingnamespacestd;

LLgcd(LLa,LLb)//Eucild

{

if(a%b)returngcd(b,a%b);

returnb;

}

LLexgcd(LLa,LLb,LL&

x,LL&

y)//扩展欧几里德,递归实现。

if(!

b)

{

x=1;

y=0;

returna;

}

LLg=exgcd(b,a%b,x,y);

LLt=x;

x=y;

y=t-(a/b)*y;

returng;

intexgcd2(LLa,LLb,LL&

y)//扩展欧几里德,递推实现。

LLq,s1,s2,t1,t2;

s1=t2=1;

s2=t1=0;

while(a%b)

q=a/b;

s1-=q*s2;

t1-=q*t2;

a%=b;

swap(s1,s2);

swap(a,b);

x=s2;

y=t2;

intcrt()//孙子定理解线性同余方程

LLA[len],M[len],l;

inti,j;

printf("

CRT(n):

\n"

);

scanf("

%I64d"

&

l);

for(i=0;

i<

l;

++i)scanf("

%I64d%I64d"

A[i],&

M[i]);

l-1;

++i)

for(j=i+1;

j<

++j)

if(gcd(M[i],M[j])!

=1)

Marrayunsatisfiedco-primecondition!

\n\n"

return-1;

LLd,x,y,m,n=1,ans=0;

for(i=0;

++i)n*=M[i];

m=n/M[i];

d=exgcd(M[i],m,x,y);

ans=(ans+(y*m*A[i])%n)%n;

d=(n+ans)%n;

MinimunX=%I64d\n\n"

d);

intmain()

LLa,b;

LLg1,g2,x,y;

intc;

while(printf("

Press'

1'

forEuclid,'

2'

forChineseremindertheory.\n"

),scanf("

%d"

c),c==1||c==2)

if(c==2)crt();

else

Pleaseenter2numbersa,b:

(Quitwhena=b=0)\n"

a,&

b),a*b)//多组数据,a=b=0时完毕处理。

g1=gcd(a,b);

(%I64d,%I64d)=%I64d\n"

a,b,g1);

[%I64d,%I64d]=%I64d\n"

a,b,abs(a*b)/g1);

g2=exgcd(a,b,x,y);

printf("

X=%I64dY=%I64d\n"

x,y);

%I64d*%I64d+%I64d*%I64d=%I64d\n"

x,a,y,b,g2);

g2=exgcd2(a,b,x,y);

%I64d*%I64d+%I64d*%I64d=%I64d\n\n"

system("

pause"

return0;

3.3运行结果及分析

〔1〕a=18,b=12时,gcd〔a,b〕=6,lcm〔a,b〕=36。

且有x=1,y=-1时,ax+by=gcd(a,b)成立。

结果正确

〔2〕a=-1859,b=1573时,gcd〔a,b〕=143,lcm〔a,b〕=20449。

且有x=5,y=6时,ax+by=gcd(a,b)成立。

〔3〕a=169,b=121时,gcd〔a,b〕=1,lcm〔a,b〕=20449。

且有x=58,y=-81时,ax+by=gcd(a,b)成立。

〔4〕a=46480,b=39423时,gcd〔a,b〕=1,lcm〔a,b〕=1832381040。

且有x=16720,y=-19713时,ax+by=gcd(a,b)成立。

〔5〕a=737,b=635时,gcd〔a,b〕=1,lcm〔a,b〕=467995。

且有x=193,y=-224时,ax+by=gcd(a,b)成立。

〔6〕

〔7〕

〔8〕

〔9〕

〔9〕

〔10〕

〔11〕

4思考题〔可选〕

通过以上程序验证解为537140的同余方程组:

假设运行结果不正确,思考如何修改程序。

运行正确。

5实验心得

本次实验,深化理解并实现了辗转相除、扩展Euclid和中国剩余定理。

让我感受到了学习的知识、理论,运用于实践,成功解决实际问题的愉悦。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 外语学习 > 英语学习

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2