怎样求n/2+1,n/2+2,n/2+3,……,n-2,n-1,n的最小公倍数?

guofengzai 2008-04-07 10:58:30
怎样求n/2+1,n/2+2,n/2+3,……,n-2,n-1,n的最小公倍数?
n为偶数
...全文
182 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
guofengzai 2008-04-12
  • 打赏
  • 举报
回复
如果每次都要分解素数并且求得最大次幂是不是开销比较大啊
rover___ 2008-04-12
  • 打赏
  • 举报
回复
n/2+1,n/2+2,n/2+3,……,n-2,n-1,n
n/2+1==m
在总数较多的情况下,求(m,m+1,m+2,...,n)的最小公倍数。推荐
素数分解法:
使用小于等于n的素数表,逐个素数确定指数。
比如2,2的指数根据[m,n]范围内的最大2的幂来定。然后3、5。
如果某素数在[m,n]范围内没有幂,则判断该素数在[m,n]范围内有无倍数,有指数为1,无为0。
最后把素数按照其指数乘幂,再相乘。
arong1234 2008-04-10
  • 打赏
  • 举报
回复
假定两个数的公倍数 g(a,b)
三个数的公倍数 g(g(a,b),c)
四个数 g( g(g(a,b),c),d)
这样只要有一个公倍数函数即可

对于两个任意整数的公倍数是有很简单的公式的

下面函数首先计算两个整数的最大公约数

unsinged int gcd(unsinged int a, unsigned int b)
{
if(a>b) {
unsigned int c;
c=a; a=b; b=c;
}
unsigned r = b%a;
while(r != 1)
{
b= a; a =r ; r = b%a;
}
return a;
}



上面函数原理参见http://blog.vckbase.com/arong/archive/2004/06/10/429.html

有了上面函数,两个数的最小公倍数就是

unsigned int gcm(unsigned int a, unsigned int b)
{
return a * b / gcd(a,b);
}


然后用开始说的方法循环即可
bfhtian 2008-04-10
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 lanmuyi 的回复:]
什么意思。。。那不就是1吗?
[/Quote]
又不是最大公约数
guofengzai 2008-04-10
  • 打赏
  • 举报
回复
很好谢谢
lanmuyi 2008-04-08
  • 打赏
  • 举报
回复
什么意思。。。那不就是1吗?

3,881

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 其它技术问题
社区管理员
  • 其它技术问题社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧