gcd(Greatest common Divisor)最大公约数,也就是两个整数所有共有因数中最大的那个。比如说12和16的最大公约数就是4,因为12的约数是:1、2、3、4、6、12,而16的约数是1、2、4、8、16,它们共有的约数是:1、2、4,那么很明显,最大的公约数就是4了。
那么如何求两个数的最大公约数呢?最容易想到的方法就是——试!
如果我们要求a、b的最大公约数,就让一个数,k,从1枚举到a、b中较小的数。如果a、b都能被k整除,就把k记录下来,如果遇到更大的k满足条件,就替换原来的k。最后,输出的答案一定是它们的最大公约数。
代码如下:
(python)
a=int(input())b=int(input())if a>b: #如果a比b大,则交换a、b,保证a存的是较小的那个 t=b b=a a=tans=0for k in range(1,a+1):#枚举1到a if a%k==0 and b%k==0:#如果k是a、b的公约数 if k>ans:#如果k比原来答案大 ans=k#更新答案print(ans)
(c++)
#include #include using namespace std;int main(){
int a,b; cin>>a>>b; if(a>b) swap(a,b); int ans=0; for(int k=1;k<=a;k++) if(a%k==0 && b%k==0) ans=max(ans,k); cout<}
运行成功:
可是,如果运用这个方法,在a、b很大的时候,程序会运行很慢。因为它需要从1开始一直往上枚举到a。