当前位置:首页 » 编程语言 » c语言求最大公约数for

c语言求最大公约数for

发布时间: 2022-10-31 11:00:02

❶ 怎样用c语言求两个数的最大公约数

#include<stdio.h>
intmain()
{
intm,n,temp,i;
printf("Inputm&n:");
scanf("%d%d",&m,&n);
if(m<n)/*比较大小,使得m中存储大数,n中存储小数*/
{/*交换m和n的值*/
temp=m;
m=n;
n=temp;
}
for(i=n;i>0;i--)/*按照从大到小的顺序寻找满足条件的自然数*/
if(m%i==0&&n%i==0)
{/*输出满足条件的自然数并结束循环*/
printf("TheGCDof%dand%dis:%d ",m,n,i);
break;
}

return0;
}

❷ C语言 求最大公约数

//只贴图不方便调试,下次请直接上代码
//给你一个现成的吧.
#include<stdio.h>
intgcd(inta,intb)
{
intt=0;
while(a){
if(a%b==0)
returnb;
else
{
t=a%b;
a=b;
b=t;
}
}
}

intyin(inta,intb)
{
returna*b/gcd(a,b);
}

intmain()
{
inta,b;
scanf("%d%d",&a,&b);
printf("最大公因数%d,最小公倍数%d:",gcd(a,b),yin(a,b));
return0;
}

❸ c语言求最大公约数

求差判定法.

如果两个数相差不大,可以用大数减去小数,所得的差与小数的最大公约数就是原来两个数的最大公约数.例如:求78和60的最大公约数.78-60=18,18和60的最大公约数是6,所以78和60的最大公约数是6.

如果两个数相差较大,可以用大数减去小数的若干倍,一直减到差比小数小为止,差和小数的最大公约数就是原来两数的最大公约数.例如:求92和16的最大公约数.92-16=76,76-16=60,60-16=44,44-16=28,28-16=12,12和16的最大公约数是4,所以92和16的最大公约数就是4.

辗转相除法.

当两个数都较大时,采用辗转相除法比较方便.其方法是:

以小数除大数,如果能整除,那么小数就是所求的最大公约数.否则就用余数来除刚才的除数;再用这新除法的余数去除刚才的余数.依此类推,直到一个除法能够整除,这时作为除数的数就是所求的最大公约数.

例如:求4453和5767的最大公约数时,可作如下除法.

5767÷4453=1余1314

4453÷1314=3余511

1314÷511=2余292

511÷292=1余219

292÷219=1余73

219÷73=3

于是得知,5767和4453的最大公约数是73.

辗转相除法适用比较广,比短除法要好得多,它能保证求出任意两个数的最大公约数.

--------------------------------------------------------------------------------

小学数学温习过后,先来个两个数递归版的

int GetGCDRec(int n, int m)
{
if (m < n)
{
m ^= n;
n ^= m;
m ^= n;
}

if (n == 0)
return m;
else
return GetGCDRec(n, m % n);
}
辗转相除法,求一个数组中所有数的最大公约数

int GetGCD(int *arr, int len)
{
int iMax = arr[0], iCurr, iRemainder;

for(int i = 1; i < len; i++)
{
iCurr = arr[i];

if (iMax < iCurr)
{
iMax ^= iCurr;
iCurr ^= iMax;
iMax ^= iCurr;
}

iRemainder = iMax % iCurr;

while (iRemainder)
{
iMax = iCurr;
iCurr = iRemainder;
iRemainder = iMax % iCurr;
}

iMax = iCurr;
}//for

return iMax;

}
最小公倍数就是乘积除以最大公约数

int GetLCM(int *arr, int len)
{
int multiple = 1;

for (int i = 0; i < len; i++)
multiple *= arr[i];

return multiple / GetGCD(arr, len);
}

❹ C语言程序设计如何求最大公约数

具体操作步骤如下:

一、新建一个C语言源程序,使用Visual C++6.0的软件。

❺ c语言如何求最大公约数和最小公倍数

#include <stdio.h>

int main()

{

int a,b,c,m,t;

printf("请输入两个数: ");

scanf("%d%d",&a,&b);

if(a<b)

{

t=a;

a=b;

b=t;

}

m=a*b;

c=a%b;

while(c!=0)

{

a=b;

b=c;

c=a%b;

}

printf("最大公约数是: %d ",b);

printf("最小公倍数是: %d ",m/b);

}

(5)c语言求最大公约数for扩展阅读

算法思想

利用格式输入语句将输入的两个数分别赋给 a 和 b,然后判断 a 和 b 的关系,如果 a 小于 b,则利用中间变量 t 将其互换。

再利用辗转相除法求出最大公约数,进而求出最小公倍数。最后用格式输出语句将其输出。

#include<stdio.h>是在程序编译之前要处理的内容,称为编译预处理命令。编译预处理命令还有很多,它们都以“#”开头,并且不用分号结尾,所以是c语言的程序语句。

❻ c语言;用for语句求正整数a,b的最大公约数

#include<stdio.h>
#include<stdlib.h>
intgcd(inta,intb)
{
inttemp;
if(a<b){/*交换两个数,使大数放在a上*/
temp=a;
a=b;
b=temp;
}
while(b!=0){/*利用辗除法,直到b为0为止*/
temp=a%b;
a=b;
b=temp;
}
returna;
}
main()
{
inta,b;
scanf("%d%d",&a,&b);
printf("%d",gcd(a,b));
system("pause");
return0;
}

❼ c语言问题 求n个数最大公约数

#include<stdio.h>
main(void)
{inta[9],n,t,i,temp1,temp2,c,d;
printf("请输入您所要输入的数字个数(须在2-9之间) ");
scanf("%d",&n);
for(i=0;i<n;i++)
{scanf("%d",&a[i]);
}
if(a[0]<a[1])
{temp1=a[0];
a[0]=a[1];
a[1]=temp1;
}
while(a[0]%a[1]!=0)
{c=a[0];
a[0]=a[1];
a[1]=c%a[1];
}
a[0]=a[1];
for(i=0;i<n;i++)
{if(a[0]<a[i])
{temp2=a[0];
a[0]=a[i];
a[i]=temp2;
}
while(a[0]%a[i]!=0)
{d=a[0];
a[0]=a[i];
a[i]=d%a[i];
}
a[0]=a[i];
}
printf("您所输入的数字最大公约数为%d",a[0]);

}

❽ C语言程序设计如何求最大公约数

求最大公约数算法:

(1)辗转相除法

两整数a和b:

① a%b得余数c

② 若c=0,则b即为两数的最大公约数,结束

③ 若c≠0,则a=b,b=c,再回去执行①

(2)相减法

两整数a和b:

① 若a>b,则a=a-b

② 若a<b,则b=b-a

③ 若a=b,则a(或b)即为两数的最大公约数,结束

④ 若a≠b,则再回去执行①

(3)穷举法:

① i= a b中的小数

② 若a,b能同时被i整除,则i即为最大公约数,结束

③ i--,再回去执行②

相关代码:

#include<stdio.h>
intxc_gcd(inta,intb)
{
intc;
c=a%b;
while(c!=0)
{
a=b;
b=c;
c=a%b;
}
returnb;
}
intxj_gcd(inta,intb)
{
while(a!=b)
{
if(a>b)
a-=b;
else
b-=a;
}
returnb;
}
intqj_gcd(inta,intb)
{
inti;
i=(a>b)?a:b;
while(a%i!=0&&b%i!=0)
i--;
returni;
}
voidmain()
{
//inta=36,b=27;
//inta=27,b=36;
inta=100,b=201;
printf("a=%db=%d ",a,b);
printf("辗转相除法求最大公约数=%d ",xc_gcd(a,b));
printf("相减法求最大公约数=%d ",xc_gcd(a,b));
printf("穷举法求最大公约数=%d ",xc_gcd(a,b));
}

运行效果图:

❾ C语言求最大公约数的代码

你的代码,主要的错误在for循环里的判断条件,应该是a%i!=0&&b%i!=0
不等号;但是,是了很久,发现这样的算法或者说思路也是错误的!因为你这样找到的只是两个数的最小公约数,而非最大公约数的,你可以用原来的想法,i

两个数中较小者那个从大到小去循环,从而找到两个数的公约数,也就是(从大到小)倒这来找公约数;或者建议你考虑辗转相除法,辗转相除法的思路是这样的:若
m和n为这连个正整数,有:当m>n,m与n
的最大公约数等于
n

m%n的最大公约数当n=0
,m与
n
的最大公约数等于
m,以下是算法,使用for语句:#include<stdio.h>
#include<windows.h>
int
main(){
int
a,b,m,n,r;
printf("输入两个正整数(请用逗号隔开):");
scanf("%d%d",&a,&b);
if(a>b)
{
m=a;
n=b;
}
else
{
m=b;
n=a;
}
for(r=b;r!=0;){
r=m%n;
m=n;
n=r;
}
printf("%d

%d
的最大公约数是:%d\n",a,b,m);
system("PAUSE");
return
0;
}

热点内容
java的科学计算法 发布:2025-01-07 20:01:48 浏览:235
php数组相加 发布:2025-01-07 20:01:43 浏览:437
数据库基本命令 发布:2025-01-07 19:50:42 浏览:79
3d点歌系统云服务器ip地址 发布:2025-01-07 19:47:48 浏览:956
定原始算法 发布:2025-01-07 19:47:04 浏览:811
如何让编译器认定是什么段 发布:2025-01-07 19:45:39 浏览:156
c语言与c区别 发布:2025-01-07 19:45:37 浏览:968
nex5t存储卡 发布:2025-01-07 19:43:44 浏览:318
myeclipse手动编译 发布:2025-01-07 19:28:35 浏览:751
阿里云数据库恢复 发布:2025-01-07 19:24:19 浏览:415