问题描述
- c语言求最小公倍数 求大神帮我理解下这个代码
- #include
int main()
{
? ?int mnik=1;
? ?scanf(""%d %d""&m&n);
? ?for(i=1;i<=m;i++)
? ?{
? ? ? ?if(m%i==0 && n%i==0)
? ? ? ?{
? ? ? ? ? ?k*=i;
? ? ? ? ? ?m/=i;
? ? ? ? ? ?n/=i;
? ? ? ?}
? ? ? ?if(m==1 || n==1)
? ? ? ? ? ?break;
? ?}
? ?printf(""%d""k*m*n);
? ?return 0;
}我的代码是:
#include
int main()
{
int mnil=1jk;
scanf(""%d%d""&m&n);
j=m;
k=n;
for(i=2;i<=m&&i<=n;i++)
{
while(j%i==0 && k%i==0)
{
j/=i;
k/=i;
l*=i;}} l=l*j*k;printf(""%dn""l);return 0;
}
我的想法是先求出最大公约数,再乘上m和n自己剩下的质因数 即求得结果
并且是从2开始除,将所有能整除的2全部除尽在除以3而最上面提问的那个代码,我不明白为什么只除一遍就可以。。 还有那个for语句中的i<=m,m是随时会变的值,并且不用判断m和n的大小吗?
求大神详解~!
解决方案
上面那个代码的思路是求出最大公因数k,并且将m n在数公因数的过程中缩小到m/k和n/k 如此相乘可得最小公倍数。事实上代码思路跟下面那个一样。
解决方案二:
以上的代码是一种经典的方法(求最小公倍数的算法), 叫辗转相除法,你可以百度一下。你会发现它的时间效率只有O(n).所以广泛的被程序员们
采纳...
解决方案三:
以上的代码是一种经典的方法(求最小公倍数的算法), 叫辗转相除法,你可以百度一下。你会发现它的时间效率只有O(n).所以广泛的被程序员们
采纳...
解决方案四:
至于代码逻辑很简单啦。主要是你要能够理解他的思路
解决方案五:
至于代码逻辑很简单啦。主要是你要能够理解他的思路
解决方案六:
这是我上学期间画的(求最大公约数)。给你提供思路。
时间: 2025-01-01 17:40:37