方法1:輾轉相除法
有兩整數a和b:
① a%b得余數c
② 若c=0,則b即為兩數的最大公約數
③ 若c≠0,則a=b,b=c,再回去執行①
例如求24和9的最大公約數過程為:
24÷9 余6
9÷6余3
6÷3余0
因此,3即為最大公約數
#coding: utf-8 n=int(raw_input('n=')) m=int(raw_input('m=')) a,b=n,m p=0 temp=0 r=0 if (n<m): temp=n n=m m=temp p=n*m while (m!=0): r=n%m n=m m=r print u'(%s,%s)最大公約數是: %s' % (str(a),str(b),str(n)) print u'(%s,%s)最小公倍數是: %s' % (str(a),str(b),str(p/n))
方法2:相減法
有兩整數a和b:
① 若a>b,則a=a-b
② 若a<b,則b=b-a
③ 若a=b,則a(或b)即為兩數的最大公約數
④ 若a≠b,則再回去執行①
例如求24和9的最大公約數過程為:
24-9=15( 15>9 ) 15-9=6( 9>6 )
9-6=3( 6>3 ) 6-3=3( 3==3 )
因此,3即為最大公約數
# coding: utf-8 a=int(raw_input('a=')) b=int(raw_input('b=')) n=a m=b while (a!=b): if a>b: a=a-b else: b=b-a print u'(%s,%s)的最大公約數是: %s' % (n,m,a) print u'(%s,%s)的最小公倍數是: %s' % (n,m,m*n/a)
方法3:窮舉法
有兩整數a和b:
① i=1
② 若a,b能同時被i整除,則t=i
③ i++
④ 若 i <= a(或b),則再回去執行②
⑤ 若 i > a(或b),則t即為最大公約數,結束
改進的算法:
① i= a(或b)
② 若a,b能同時被i整除,則i即為最大公約數,結束
③ i--,再回去執行②
# coding: utf-8 a=int(raw_input('a=')) b=int(raw_input('b=')) n=a m=b t=a while (t>0): if (a % t == 0 and b % t == 0): break t=t-1 print u'(%s,%s)的最大公約數是: %s' % (n,m,t) print u'(%s,%s)的最小公倍數是: %s' % (n,m,m*n/t)
三個算法得出的結果: