首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

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

2012-06-24 
关于求N个数的最小公倍数今天在做ACM上的题做到第2028(11页)时:#includeiostreamusing namespace stdin

关于求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;} 

热点排行