中易网

c语言编程,利用辗转相除法求公约数

答案:3  悬赏:40  
解决时间 2021-01-18 12:41
c语言编程,利用辗转相除法求公约数
最佳答案
辗转相除法, 又名欧几里德算法(Euclidean algorithm)乃求两个正整数之最大公因子的算法。
其原理如下:
设两数为a、b(b第一步:令c=gcd(a,b),则设a=mc,b=nc
第二步:根据前提可知r =a-kb=mc-knc=(m-kn)c
第三步:根据第二步结果可知c也是r的因数
第四步:可以断定m-kn与n互质【否则,可设m-kn=xd,n=yd (d>1),则m=kn+xd=kyd+xd=(ky+x)d,则a=mc=(ky+x)dc,b=nc=ycd,故a与b最大公约数成为cd,而非c,与前面结论矛盾】
从而可知gcd(b,r)=c,继而gcd(a,b)=gcd(b,r)。
证毕。
以上步骤的操作是建立在刚开始时r!=0的基础之上的。即m与n亦互质。
按照其规则,C语言实现如下:

int GCD(int a,int b)
{return b==0?a:GCD(b,a%b);}
全部回答
最大公约数,最小公倍数都有了,请查收
int MaxCommonDivisor(int x,int y)
{
int temp;
if(x {
temp=x;
x=y;
y=temp;
}
while(y)
{
temp=x%y;
x=y;
y=temp;
}
return x;
}
int MinCommonMultiple(int x,int y)
{
return x*y/MaxCommonDivisor(x,y);
}
是最大公约数吗?不是的话你可以改一下
#include
void main()
{ unsigned int m,n,m1,n1,a;
printf("Enter two zheng numbers:");
scanf("%d%d",&m,&n);
m1=m;n1=n;
a=m1%n1;
while(a!=0)
{ m1=n1;n1=a;a=m1%n1;}
printf("%d ",n1);
}
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
excel中如何表示(如果有a无b,则c,如果无a有不
古堡惊魂的结局是什么
那年我才十八岁七八个老娘们把我睡
简述同感反应的要领
负3-负2^2等于多少
为什么我今天撒的尿是清的,跟清水一样,一点
郑州近的地方哪里好玩
哎呦不错哦 怎么接下句
天秤座女人是第一美身材吗
南京站火车站列车k525入口
用Word如何打出信纸格式,包括横格纸和方格纸?
HD72OP摄像头的原史密码是多少?
昌河酒店停车场地址在什么地方,我要处理点事
前些天我的2014款科帕奇(四驱)不慎开入泥坑,
问,王佳艺这个名字如何,各位大神
推荐资讯
谁有那种乱七八糟的微信群啊,拉我一下嘻嘻
lol陪练价格表
刚刚破解了PS3 运行的multiman 刚刚电玩巴士
沧州万泰豪景到万泰丽景怎么做公交车
信佛的人在临死前念经直到死去。理智吗
一个人去ktv会不会显得太傻?
卡车轮胎顶部黄白线是什么意思
我想找一份工作,管吃住的,工资2000 以上的
做仓管员好吗
请问:董皖城名字好听吗
小狗喝多少酒能醉?
求作文摘抄五篇,就是好词,好句,然后要造句
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?