模板-->单变元模线性方程

如果有相应的OJ题目,欢迎同学们提供相应的链接

相关链接

简单的测试

None

代码模板

/*
 * TIME COMPLEXITY:O(logN)
 * PARAMS:
 *      a   ax+ny=b
 *      b
 *      n
 *
 * d=gcd(a,n),ax+ny=d,==>x.But the x is not minimum positive number.See below.
 * the x satisfy ax==d(mod n).If x larger than n,then x=n+y.Thus a(n+y)==b(mod n)==>ay==b(mod n),do that x%=n.After that
 * (ax+na)%n==b%n is correct.x+=n.   The code:x%=n,x+=n,x%=n.
 *
 * Actually,ax'==b(mod n),and b is times of d.So change x'=x*(b/d).
 * Now ax==b(mod n)[x=x'],but x is not minimum number in this equation.
 * Then a'x=b'(mod n'),a'=a/d,b'=b/d,n'=n/d.According to the second line in comment,x=x%n'==>x=x%(n/d).
 * Similarlly,i times n/d+ans[0].
 * Last %n is another limit.
 */
vector <long long> line_mode_equation(long long a,long long b,long long n){
    long long x,y;
    long long d=extend_gcd(a,n,x,y);
    vector<long long> ans;
    ans.clear();
    if(b%d==0){
        x%=n;x+=n;x%=n;
        ans.push_back((x*(b/d)%(n/d)+n/d)%(n/d));
        for(long long i=1;i<d;i++)
            ans.push_back((ans[0]+i*n/d)%n);
    }
    return ans;
}

转载于:https://www.cnblogs.com/mRRRR/p/5540231.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值