Math n个数模100000007的LCM

Math n个数模100000007的LCM,math,lcm,Math,Lcm,我必须找到模10^9+7的n个数的LCM。我的方法是找到两个数的LCM,然后对它们进行修改。然后取下一个元素的LCM和从上一次迭代中得到的答案,并对它们进行修改。对所有元素都这样做。它错了吗?是的,它错了。我一直在研究一个类似的问题 您必须熟悉MOD的以下属性: 属性1:(a*b*c*d..*p*q)%MOD=(a%MOD)(b%MOD)(c%MOD)…(q%MOD) 但LCM的情况并非如此 LCM(a,b)=a*b/GCD(a,b) LCM(LCM(a,b,c)=LCM(a,b)*c/GCD(

我必须找到模10^9+7的n个数的LCM。我的方法是找到两个数的LCM,然后对它们进行修改。然后取下一个元素的LCM和从上一次迭代中得到的答案,并对它们进行修改。对所有元素都这样做。它错了吗?

是的,它错了。我一直在研究一个类似的问题

您必须熟悉MOD的以下属性:

属性1:(a*b*c*d..*p*q)%MOD=(a%MOD)(b%MOD)(c%MOD)…(q%MOD)

但LCM的情况并非如此

LCM(a,b)=a*b/GCD(a,b)

LCM(LCM(a,b,c)=LCM(a,b)*c/GCD(LCM(a,b,c)

只要LCM大于MOD,上述属性就会被销毁。你们必须试着用分子中不同数字的乘积来寻找LCM

这可以通过对所有数字进行因子分解并记录各种因子的最高幂来实现


LCM=(2^a)(3^b)。。。。现在,您可以轻松地迭代地将它们相乘,并使用属性1将限制保持在MOD以下

> P>只是为了将来的参考,这里是一个C++实现,它没有使用素数分解。 一个可能的解决方案是为答案保留一系列因素。 每个因子将是1..N中的每个数字除以GCD(数字,[全部 以前的数字)。要使其工作,您必须编写一个特殊的GCD 它计算单个数字和数组之间的结果 因素。这个C++代码显示了它的工作原理:

#包括
#包括
#定义lli长整型
使用名称空间std;
向量T;
lli gcd(lli a,lli b){
如果(b==0)
返回a;
返回gcd(b,a%b);
}
lli gcd_向量(向量a、lli b){
lli-ma=1;

对于(int i=0;ibelongs on,我想这就是你要找的…[计算n个数的lcm,模100000007][1][1]:你在用什么语言?