c语言求最大公约数for
❶ 怎样用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;
}