c语言如何求最大公约数和最小公倍数?
要求两个数的最大公约数,可以采用欧几里得算法,即较大数除以较小数,若余数不为0,则将被除数作为除数,余数作为被除数重复操作,直至余数为0,此时除数即为最大公约数。
要求两个数的最小公倍数,则先求出最大公约数,再用两数的乘积除以最大公约数即可得到。在程序实现上,可以用递归或循环求解。
辗转相除法求最小公倍数?
辗转相除法是用于求较大的两个正整数的最大公因数,而非求其最小公倍数。
辗转相除法就是不断以上一个除数除以余数的过程,直到商是非0无余数时,除数就是最大公因数。
C语言 求最小公倍数和最大公约数
- #includestdio.hmain(){ int m,n,t,i,a,b; scanf("%d%d",&m,&n); if(nm) { t=m; m=n; n=t; } i=n; while(i=1) { a=m%i; b=n%i; if(a==0&&b==0) { printf("最大公约数为:%dn",i); break; } else if i–; } i=m; while(m=m*n) { a=i%m; b=i%n; if(a==0&&b==0) { printf("最小公倍数为:%dn",i); break; } else if i++; }}为什么我这个他老提示 i 错误,求大神解释,谢谢…..
- #include stdio.hvoid main(){int x,y,tempGY,tempGB,GY,GB; printf("输入两个正整数(用空格分开),求这两个正整数的最小公倍数和最大公约数:n"); scanf("%d%d",&x,&y); for(int i=1;i=(xy?x:y);i++){if(x%i==0 && y%i==0)GY=i;} for(i=tempGB;i=(xy?y:x);i–){if(i%x==0 && i%y==0)GB=i;}printf("最大公约数是%d,最小公倍数是%dn",GY,GB);getchar();}
初学者:C语言求两个整正数的最大公约数和最小公倍数,怎么错了???
- #includestdio.hint main(){ int a,b,c,d,e; scanf("%d%d",&a,&b); do { c=a%b; if(c!=0) a=b; b=c; printf("%d%dn",a,b);break;} while(c=0)甫触颠吠郯杜奠森订缉; d=b; e=a*bd; printf("%d%dn",d,e); return 0;}
- 代码可以加一些注释吗? 我怎么看都不理解你求的过程
c语言输入两个正整数m、n求最大公约数和最小公倍数,求大神看看我哪错
- c语言输入两个正整数m、n求最大公约数和最小公倍数,求大神看看我哪错了,第二个输出不对
- 把第二个i从最m或n(哪个最大就i=那个)开始就不会出现这种错误了.另外:我都不明白,老是有一大堆人说代码有问题,却只知发图,有些更离谱,只是用手机拍个不清不楚的图.你以为是美女咩??无图无真相呀?!发个代码不会比截图麻烦吧?至少在我而言ctrl+C,Ctrl+V 肯定比截图保存再上传快.有心想帮你也没有多少精神去看你的图中代码呀!再说了肯定是用编译器跑代码比用脑子跑容易发现并定位问题吗,特别是稍微长点的代码!!在此奉告所有那些代码有问题想问人的同学,请直接贴上代码!!!!!!!!!!!!!!!!!!!!!!!!!!!!
用c++语言求最大公约数和最小公倍数,求解哪里错了
- #includeiostreamint main(){ using namespace std; int m,n; cout"请输入两个数:"; cinmn"n"; int t=(nm?m:n); while(m%t!=0||n%t!=0) { t=t-1; } cout"最大公约数为:"t"n""最小公倍数为:"m*nt; return 0;}
- 输入两个正整数m和n, 求其最大公约数和最小公倍数. 1 用辗转相除法求最大公约数 算法描述: m对n求余为a, 若a不等于0 则 m – n, n – a, 继续求余 否则 n 为最大公约数 2 最小公倍数 = 两个数的积 最大公约数 #include int main() {int m, n; int m_cup, n_cup, res; *被除数, 除数, 余数* printf("Enter two integer:n"); scanf("%d %d", &m, &n); if (m 0 && n 0) { m_cup = m; n_cup = n; res = m_cup % n_cup; while (res != 0) { m_cup = n_cup; n_cup = res; res = m_cup % n_cup; } printf("Greatest common divisor: %dn", n_cup); printf("Lease common multiple : %dn", m * n n_cup); } else printf("Error!n"); return 0; } ★ 关于辗转相除法, 搜了一下, 在我国古代的《九章算术》中就有记载,现摘录如下: 约分术曰:“可半者半之,不可半者,副置分母、子之数,以少减多,更相减损,求其等也。以等数约之。” 其中所说的“等数”,就是最大公约数。求“等数”的办法是“更相减损”法,实际上就是辗转相除法。 辗转相除法求最大公约数,是一种比较好的方法,比较快。 对于52317和75569两个数,你能迅速地求出它们的最大公约数吗?一般来说你会找一找公共的使因子,这题可麻烦了,不好找,质因子大。 现在教你用辗转相除法来求最大公约数。 先用较大的75569除以52317,得商1,余数23252,再以52317除以23252,得商2,余数是5813,再用23252做被除数,5813做除数,正好除尽得商数4。这样5813就是75569和52317的最大公约数。你要是用分解使因数的办法,肯定找不到。 那么,这辗转相除法为什么能得到最大公约数呢?下面我就给大伙谈谈。 比如说有要求a、b两个整数的最大公约数,a>b,那么我们先用a除以b,得到商8,余数r1:a÷b=q1…r1我们当然也可以把上面这个式子改写成乘法式:a=bq1+r1——l) 如果r1=0,那么b就是a、b的最大公约数3。要是r1≠0,就继续除,用b除以r1,我们也可以有和上面一样的式子: b=r1q2+r2——-2) 如果余数r2=0,那么r1就是所求的最大公约数3。为什么呢?因为如果2)式变成了b=r1q2,那么b1r1的公约数就一定是a1b的公约数。这是因为一个数能同时除尽b和r1,那么由l)式,就一定能整除a,从而也是a1b的公约数。 反过来,如果一个数d,能同时整除a1b,那么由1)式,也一定能整除r1,从而也有d是b1r1的公约数。 这样,a和b的公约数与b和r1的公约数完全一样,那么……余下全文