ceqiong.net
当前位置:首页>>关于写最大公约数的流程图的资料>>

写最大公约数的流程图

a=max(m,n) b=min(m,n) 循环 if b被a整除 输出b,即为最大公约数 停止循环 else c=a-b a=max(b,c) b=min(b,c) end

#include<stdio.h> void main(){ int a,b,i,d,c = 1;//c是存放公约数的变量 printf("输入两个数(以逗号隔开):"); scanf("%d,%d",&a,&b); i = 2; if ( a > b) d = b; else d = a; while( d >= i ){ if ( 0 == a%i && 0 == b%i) { c = c * i; a = a/i; b = b/i; d = d/i; } i++; } printf("他们的最大公约数为:%d\n",c); } 有那看不懂我在解说

void main(){int a,b;int i,yue;printf("输入两个整数a,b:");scanf("%d%d",&a,&b);for(i=(a%2==0&&b%2==0?2:1);i<=(a<b?a:b);i++)if(a%i==0&&b%i==0) {yue=i;break;}printf("%d和%d的最大公约数是:%d\n",a,b,yue);}看完这个代码后画流程图就简单了,试试

function GetMaxYueShu(M,N:Integer):Integer; begin Result := 0; for I:=Min(M,N)-1 downto 0 begin if (I mod M=0)and(I mod N=0) then begin Result := I; Exit; end end; end;

//这里求最大公约数用了欧几里德算法,你自己上网查查吧,数论书里也有. //最小公倍数=a/最大公约数*b,数论书上也有证明 #include<stdio.h> int gcd(int a,int b){return a%b?gcd(b,a%b):b;} int main() { int a,b,gcd_,lcm_; scanf("%d%d",&a,&b); gcd_=gcd(a,b); lcm_=a/gcd_*b; printf("最小公倍数:%d\n最大公约数:%d\n",lcm_,gcd_); return 0; }

两个两个求!求出前两个的,再和第三个求……

我想你看到的应该是用的辗转相除法吧.就如你所说,定义变量a代表被除数,变量b代表除数,变量c为a/b的余数.若c=0,则a,b的最大公约数为b;若c不为0,则将b作为被除数,c作为除数,辗转相除至余数为0为止.用java代码表示为:

大概思路是这个样子的 你定义一个变量a 给它赋初值1 然后建立一个循环 循环的条件就是这个变量a始终不大于这两个数中较小的那个 让这个变量a不断增大 同时在循环的每次过程中判断能否被这两个数整除 然后不断将这个变量a赋值给另外一个变量b 这个变量b就保存了这两个数的公约数 直到循环结束 此时这个数b就是最大公约数

网站首页 | 网站地图
All rights reserved Powered by www.ceqiong.net
copyright ©right 2010-2021。
内容来自网络,如有侵犯请联系客服。zhit325@qq.com