题目链接:http://acm.hdu.edu.cn/shoproblem.php?pid=2028
这种题最直接的方法就是
穷举法
#include<stdio.h>
void main()
{
int n,min,i,m,a[100];
while(scanf("%d",&n)!=EOF)
{
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
min=a[0];//可以减去一次循环
for(i=1;i<n;i++)
{
for(m=min;;m++)
{
if(m%a[i]==0&&m%min==0)break;//判断为最小公倍数的条件
}
min=m;//每次循环的最小公倍数
}
printf("%d\n",m);
}
}
若求最大公约数则
#include<stdio.h>
void main()
{
int n,min,i,m,a[100];
while(scanf("%d",&n)!=EOF)
{
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
min=a[0];//可以减去一次循环
for(i=1;i<n;i++)
{
for(m=min;;m--)
{
if(a[i]%m==0&&min%m==0)break;//判断为最大公约数的条件
}
min=m;//每次循环的最大公约数
}
printf("%d\n",m);
}
}
第二种辗转相除法(用于求两数的最大公约数和最小公倍数)
方法如下
int s(int a,int b)//辗转相除法
{
int f,t;
int p = a,k = b;
if(a<b)
{
t=a;
a=b;
b=t;
}
while(b!=0)
{
f=a%b;
a=b;
b=f;
}
// printf("%d",a);//a为所得最大公约数
return p/a*k;//最小公倍数=两数之积/最大公约数
}