首页 > 解决方案 > 我在使用模算术解决问题时遇到问题

问题描述

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

我尝试使用基础知识使用模运算,即 (ab)%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;

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

标签: c++modular-arithmetic

解决方案


推荐阅读