N + 1连续数的LCM

时间:2013-03-10 02:27:00

标签: modulo lcm

我们如何编写代码来找到以下解决方案: (N + 1)* X = LCM(1,2,3,4,5,6,......,N,N + 1)当它大于(10 ^ 9 + 7)时使用mod。使用MOD =(10 ^ 9 +7)。 我写过以下代码片段,但它不起作用:

ll dp[100005];
ll gcd (ll a,ll b)
 {
        if (b == 0)
                return a;
        else
                return gcd (b, a % b);
}
void extend_euclid(int a,int b,int &x,int &y)
{
    if(a==0)
    {
                x=0;y=1;
                return;
        }
        int x1,y1;
        extend_euclid(b%a,a,x1,y1);
        x=y1-(b/a)*x1;
        y=x1;
}
void init()
{
    dp[1]=1;
    for(ll i=2;i<100002;i++)
    {
        ll x,y;
        x=dp[i-1]*i;
        x=x%mod;
        y=gcd(i,dp[i-1]);
        y=y%mod;
                int z1,z2;
        extend_euclid(y,mod,z1,z2);
                y=(z1+mod)%mod;
                dp[i]=(y*x)%mod;
    }
}

1 个答案:

答案 0 :(得分:0)

我认为这是你的问题(如果我错了,请纠正我):

  

当N * X = LCM(1 - > N)(mod 1E9 +7)时找到X

首先,得到LCM(1 - > N),然后除以N。

不是计算每个数字的最小值的LCM,而是可以查看每个素数≤N并取最大指数≤N,将它们相乘。 因此,如果N = 20,你需要:16(2 ^ 4),9(3 ^ 2),5,7,11,13,19。将它们相乘,得到232792560,等于LCM(1 - &gt; 20)。

有了这个,N总是分成LCM(1-> N),(我会让你解决原因)并找到X很容易。

现在,您会注意到N = 23,您必须(mod 1E9 +7)并且您的LCM(1-> 23)不能被23整除。 你能澄清一下这个问题需要什么吗?你必须找到一个等于LCM(1&gt; 23)的X * N(mod 1E9 +7)??