C语言——求最大公约数和最小公倍数的简单程序?
首先我们输入两个整数m和n,小的数赋值给m,大的数给n。先找n的约数,用一个中间量i代替m,从i开始,如果n%i==0,则说明n,m的最大公约数就是m,否则执行第3步,i自减1,再执行n%i,判断n%i==0,如果是说明n能被i整除;执行第4步,否则再次执行第3步,判断m%i是否等于0,如果是说明n和m能同时被i整除,最大公约数为i;否则执行第3步,最小公倍数比较容易求,只要两数相乘,然后除以最大公约数就可以得到。
c语言辗转相除法的原理?
c语言中辗转相除法的原理是,
辗转相除法是用来求最大公约数的一种方法。在许多计算机语言中都有。两个整数的最大公约数是能够同时整除它们的最大的正整数。辗转相除法基于如下原理:两个整数的最大公约数等于其中较小的数和两数的差的最大公约数。例如,252和105的最大公约数是21(252 = 21 × 12;105 = 21 × 5);因为252 ?? 105 = 147,所以147和105的最大公约数也是21。在这个过程中,较大的数缩小了,所以继续进行同样的计算可以不断缩小这两个数直至其中一个变成零。剩下的还没有变成零的数就是两数的最大公约数。
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的公约数完全一样,那么……余下全文