我无法使用模数算法解决问题

时间:2019-06-12 07:11:14

标签: c++ modular-arithmetic

我需要在给定表达式i *(n + k-2)-((i *(i + 1)*(n-1))/ 2)上应用模数e = 10 ^ 9 + 7用n和k表示。 n和k由用户输入。 2≤N≤10^ 18 1≤K≤10^ 18

我尝试使用基础知识即模数算法,即(a-b)%e =(((a%e)-(b%e))%e 和(a b)%e =((a%e)(b%e))%e。

//i have taken unsigned long long int as the data type for all variables    
    a=1;
    b=1;
    cin>>n>>k;
    i=(n+k-2)/(n-1);
    //s=(i*(n+k-2))-((i*(n-1)*(i+1))/2
    j=(i+1);
    p=n+k-2;
    q=n-1;
    r=i/2;
    u=j/2;
    if(i%2==0)
    {
        a=(a*i)%e;
        a=(a*p)%e;
        b=(b*r)%e;
        b=(b*q)%e;
        b=(b*j)%e;
        s=a-b;

    }
      else
    {
        a=(a*i)%e;
        a=(a*p)%e;
        b=(b*u)%e;
        b=(b*q)%e;
        b=(b*i)%e;
        s=a-b;

    }
    cout<<s%e<<endl;

对于小型测试用例,我得到了正确的答案,但是对于大型测试用例,我没有得到正确的答案。

0 个答案:

没有答案