C语言中求两个数的最大公约数的公式是什么?

C语言中求两个数的最大公约数的公式是什么?

int i,a=3,b=6;
int max=b; //初始化b大,下面判断如果a>b就把a给max
//判断a,b大小
if(a>b)
max=a;
for(i=max;i>0;i--) //公约数肯定不大于两数中最大的,所以从最大的往下找,找到的第一个就是最大
{
if(a%i==0 && b%i==0)
{
printf("最大公约数%d",i);
break; //找到最大的就退出
}
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-04-09
辗转相除法:
int r,a,b
do
{r=a/b;<br/>a=b;<br/>b=r;<br/>}while(r>0) /*此时的a为最大的公约数*/
第2个回答  2013-04-09
用中国剩余定理也可以,就是高中数学书上的更相减损之术
第3个回答  2013-04-09
(a,b)表示a和b的最大公约数:(a,b)=(a,a-b)?
第4个回答  2019-08-07
#include
void
main()
{
int
a,b,j=0,i,f=0,h=0;
int
u[2];
int
x[100];
int
y[100];
int
z[100];
for(i=0;i<=1;i++)
//把输入的两个数放进数组u[i]
{
scanf("%d",&u[i]);
}
for(a=1;a<=u[0];a++)
//求输入的第一个数即u[0]的所有约数,把约数全部放进x[j]
{
for(b=1;b<=u[0];b++)
{
if(a*b==u[0])
{
x[j]=a;
j++;
}
}
}
for(a=1;a<=u[1];a++)//求输入的第二个数即u[1]的所有约数,把约数全部放进一y[f]
{
for(b=1;b<=u[1];b++)
{
if(a*b==u[1])
{
y[f]=a;
f++;
}
}
}
for(a=0;a<j;a++)//找出x[]与y[]中相同的元素,把相同元素放进z[h]
{
for(b=0;b<f;b++)
{
if(x[a]==y[b])
{
z[h]=x[b];
h++;
}
}
}
printf("%d
",z[h-1]);
}
我给你稍做了修改。
你的小错误:
1.“void
mian()”是main()
2.你赋值经常赋反,必须是未知=已知。“b=x[j];e=y[f];”
3.在访问数组的时候,数组里面没有数你也访问了,这样会出错,也会浪费时间和资源。如“
for(j=0;j<=100;j++)”这里面x[]后面有很多是没有赋值的。
4.“for(h=0;h<=100;h++)/*在z[h]中各元素相比较,找出最大的元素即最大公约数*/”z[h]已经是由小到大的顺序了,只需要输出最后的那个。
5.尽量减少未知变量。
这个求最大公约数还有个简单的算法。你可以去百度查查。
希望我的回答对你有帮助。

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网