关于求N个数的最小公倍数,该如何解决

关于求N个数的最小公倍数
今天在做ACM上的题做到第2028(11页)时:
#include<iostream>
using namespace std;
int LCM(int m,int n)//辗转相除
  //我用这个函数求提交不能通过很郁闷
{
  int a=m,r,b=n;
  while(n)
  {
  r=n;
  n=m%n;
  m=r;
  }
 return (a*b)/m;
}
int LCM(int m,int n)//这种方法(相当于一步一步求却行)可以通过
{
  int multiply=1;
 for(int i=2;i<=m&&i<=n;i++)
if(m%i==0&&n%i==0)
{
multiply*=i;
m/=i;
n/=i;
i=1;
}
return multiply*m*n;
}
int main()
{

int n,*p;
  while(cin>>n)
  {
  p=new int [n];
for(int i=0;i<n;i++)
cin>>p[i];
  for(i=0;i<n-1;i++)
p[i+1]=LCM(p[i],p[i+1]);
cout<<p[i]<<endl;
  }
  return 0;
}
因为想着第一种方法好点,于是先写的第一种...可是一直 wrong answer...
麻烦指点下辗转相除和一般做法有什么不同? 少考虑什么了?
都是两个两个的求最大公倍数....

------解决方案--------------------
这个程序的结果是零,显然不对!
C/C++ code

#include <iostream>
using namespace std;

int lcm(int m, int n)
{
    int m_temp = m;
    int n_temp = n;

    int temp;
    while(n!=0)
    {
         temp = m%n;
         m = n;
         n = temp;         
    }

    return m_temp*n_temp/m;
}

int main()
{
    cout<<lcm(65536, 65536)<<endl;
    return 0;
}