> 其他 >
c++求最小公倍数.
虽然有思路但是不知道怎么写成代码:定义两个整数m,n,最小公倍数就是am=bn,当m=bn时最小公倍数为m.当a,b两个都是偶数时,则不是公倍数,当a,b两数一个奇数一个偶数或两个奇数时则为最小公倍数.则输出最小公倍数.
请用我的思路来写一下代码,看一下我的思路能否实现?,如果可能,最后在提出一个更好的思路.
人气:197 ℃ 时间:2020-06-30 16:43:22
解答
按你的思路,应该是给定两个数a,b;判断是否属于 一个奇数一个偶数或两个奇数 的情况,不是除2,若是,需要检测两个数是否互质,不是就要除以他们的一个最小公因子,然后循环这样的操作就能实现你的思路,但耗费时间久,效率...是求m,n的公倍数,你解读我的思路是解读成求m,n的公倍数吗?

按你的思路写的代码,看是否符合你的要求?

 #include <iostream>
using namespace std;
class lcm_gcd
{
 int X;
 int Y; //存取传入参数值
 int s[20]; //存放质因子
 int si;    //存放每次判断质因子的积
 int slength;//存放s[20]的长度
public:
 lcm_gcd(int,int);   //定义构造函数
 void lcm();         //定义最小公倍数函数
 void  zhiyz(int);   //定义质因子函数
};
lcm_gcd::lcm_gcd(int a,int b)
{
 X=a;
 Y=b;
}
void lcm_gcd::lcm(){
 zhiyz(X);
 si=1;
 for(int i=0;i<slength;i++)
 {
  for(;X%s[i]==0&&Y%s[i]==0;)
  { si=si*s[i];
  X=X/s[i];
  Y=Y/s[i];
  }
 }
 cout<<"最小公倍数:"<<si*X*Y<<endl;
}
void  lcm_gcd::zhiyz(int a) {  //求质因子
 slength=0;
 int n,n0,i=2,j=0; 
 int tmp=0; 
 n=a; 
 n0=n; 
 while(n0>=i) 
 { 
  if(n0%i==0) 
  { 
   if(i!=tmp) 
   {   s[j]=i;
   j++;
   slength++;
   tmp=i; 
   } 
   n0 /= i; 
  } 
  else 
   i++; 
 } 
 if(n0!=1 && n0!=tmp) 
 { 
  s[j]=n0;
  slength++;
 }
 int k=slength;
}
void main()
{
 int a,b;
 cout<<"输入两个整数"<<endl;
 cin>>a>>b;
 lcm_gcd aa(a,b);
 aa.lcm();
}
推荐
猜你喜欢
© 2024 79432.Com All Rights Reserved.
电脑版|手机版