最大公约数和最小公倍数
#include <stdio.h>
#include <stdlib.h>
unsigned __int64 GCD(unsigned __int64 a,unsigned __int64 b)
{
unsigned __int64 temp;
if(a<b)
{
temp = a;
a = b;
b = temp;
}
temp = a%b;
while(temp!=0)
{
a = b;
b = temp;
temp = a%b;
}
return b;
}
unsigned __int64 LCM(unsigned __int64 a,unsigned __int64 b,unsigned __int64 gcd)
{
return a*(b/gcd);
}
int main()
{
unsigned __int64 a,b,next;
unsigned __int64 gcd, lcm, gcdtmp,lcmtmp;
int isZero = 0;
scanf("%I64u", &a);
if(scanf("%I64u", &b)==EOF)
{
printf("%I64u %I64u", a,a);
return 0;
}
if(a == 0 || b == 0)
{
printf("0 0");
return 0;
}
gcd = GCD(a,b);
lcm = LCM(a,b,gcd);
while(scanf("%I64u", &next)!=EOF)
{
if(next == 0 )
{
printf("0 0");
return 0;
}
gcdtmp = GCD(b,next);
lcmtmp = LCM(b,next,gcdtmp);
gcd = GCD(gcd, gcdtmp);
gcdtmp = GCD(lcm,lcmtmp);
lcm = LCM(lcm,lcmtmp,gcdtmp);
b = next;
};
printf("%I64u ", gcd);
printf("%I64u", lcm);
return 0;
}