首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >模1000000007 N数的LCM计算

模1000000007 N数的LCM计算
EN

Stack Overflow用户
提问于 2013-05-19 10:02:47
回答 4查看 7.4K关注 0票数 1

我在LCM上解决了以下问题:计算N个模1000000007的LCM

我的方法:

代码语言:javascript
复制
typedef unsigned long long ull;
const ull mod=1000000007;
ull A[10009];
/*Euclidean GCD*/
ull gcd(ull a,ull b)
{
    while( b != 0)
    {
        ull  t = b;
        b= a %t;
        a = t;
    }
    return a;
}
ull lcm(ull a, ull b) 
{ 
    return (a/gcd(a,b))%mod*(b%mod); 
}
ull lcms(int  l ,ull * A)
{
    int     i;
    ull result;
    result = 1;
    for (i = 0; i < l; i++) 
        result = lcm(result, A[i])%1000000007;
    return result;
}
int main()
{
    int T;
    cin>>T;
    while(T--)/*Number of test cases*/
    {
        int N;
        cin>>N;/*How many Numbers in Array*/
        for(int i=0;i<N;++i)
        {
            cin>>A[i];//Input Array
        }
        cout<<lcms(N,A)%1000000007<<endl;
    }
    return 0;
}

当我提交我的解决方案时,我得到了错误的答案。制约因素是:

代码语言:javascript
复制
1<=N<=1000
and 1<=A[i]<=10000

在IDEONE

我想我的答案是错误的,因为溢出。如何改进我的代码?

谢谢!

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-05-19 10:19:26

1000000007太大了,我不能以它为例。例如,让我使用17

代码语言:javascript
复制
LCMS(10, 9, 8) % 17 =
LCM(10, LCM(9, 8)) % 17 =
LCM(10, 72) % 17 =
360 % 17 =
3

这就是您的代码所做的:

代码语言:javascript
复制
LCMS(10, 9, 8) % 17 =
LCM(10, LCM(9, 8) % 17) % 17 =
LCM(10, 72 % 17) % 17 =
LCM(10, 4) % 17 =
40 % 17 =
6

这是错误的。

也在IDEONE

票数 6
EN

Stack Overflow用户

发布于 2013-05-19 14:35:48

只需将你的数字分解为质数数组,计算这些数组上的lcms,然后将它们相乘成答案。

第一个素数是2,3,5,7,11,13,。例如,45 = 3^2 *5变成{0,2,1,0,0,.}

代码语言:javascript
复制
vector<uul> lcm(vector<uul> a, vector<uul> b) {
  vector<uul> res(a.size());
  for (size_t i = 0; i < a.size(); ++i) {
    res[i] = max(a[i], b[i]);
  }
  return res;
}
票数 5
EN

Stack Overflow用户

发布于 2014-07-06 06:45:38

正如johnchen902所提到的,您的方法是错误的。

以下是我的做法:

代码语言:javascript
复制
for i=1 to n
    a.take i_th number as x
    b.reduce(devide) remaining numbers(i+1_th to n_th) by their gcd with x
    c.multiply x to ans and take mod of ans
return ans

见IDEONE

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16633449

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档