HDOJ 2028 Lowest Common Multiple Plus

来源:互联网 发布:日本海军 知乎 编辑:程序博客网 时间:2024/05/20 06:30

欧几里得定律,又叫辗转相除法,整数a,b(a>b),则最大公约数为

gcd(a,b)

{

int t,a,b;

while(b!=0)

{

t=b;

b=a%b;

a=t;

}

}

而根据欧几里得定律,最小公倍数lcm=a*b/gcd(a,b)   //a,b为初始值;

代码如下

#include"stdio.h"int lcm(int a,int b){        int t1,t2,t;        t1=a;        t2=b;        while(t2!=0)  //  这里不用比较t1,t2的大小,运行时会把顺序相反的交换位置的;        {              t=t2;              t2=t1%t2;              t1=t;        }        return b/t1*a;  //这里不用a*b/t1;为了防止数据溢出;}      main(){        int n,a,b,m1,m2;        while(scanf("%d",&n)==1)        {                scanf("%d",&a);                n-=1;                while(n--)                {                          scanf("%d",&b);                          a=lcm(a,b);                }                printf("%d\n",a);        }}


 

原创粉丝点击