求最大公约数的算法小结:此算法属于数论,也基本的算法之一,十分重要,今天在化工大学比赛差点就废在这上面
(1)辗转相除法:
#include<stdio.h>
intmain(void) /* 辗转相除法求最大公约数 */
{
int m,n, a, b, t, c;
printf("Input two integer numbers:\n");
scanf("%d%d", &a, &b);
m=a; n=b;
while(b!=0) /* 余数不为0,继续相除,直到余数为0 */
{c=a%b; a=b; b=c;}
printf("The largest common divisor:%d\n", a);
printf("The least common multiple:%d\n", m*n/a);
}
(2)穷举法
例题:http://acm.hdu.edu.cn/showproblem.php?pid=2028
穷举法(此方法虽然容易,但是容易超时,最好的还是辗转相除)
#include<iostream>
using namespace std;
int main(void)
{
intn,i,j,max,a[100];
while(cin>>n)
{
for(i=0;i<n;++i)
{
cin>>a[i];
max=a[0];
if(a[i]>max)
max=a[i];
}
for(j=max;;++j)
{
for(i=0;i<n;++i)
{
if(j%a[i]!=0)
break;
}
if(i==n)//个人猜测可能因为j无上限,所以引起上溢,导致i上溢,需要考虑此情况;
break;
}
cout<<j<<endl;
}
}