单变元模线性方程模板

template<class T> void exgcd(T a,T b,T &d,T &x,T &y){
    if(!b) {d=a;x=1;y=0;}
    else {exgcd(b,a%b,d,y,x);y-=x*(a/b);}
}
//求解a*x=b mod n
//如果有解那么解的个数有d=gcd(a,n)个
vector<long long > line_mod_equation(long long a,long long b,long long n){
    long long x,y,d;
    vector<long long >ans;
    ans.clear();
    exgcd(a,n,d,x,y);
    if(b%d==0){
        x=((x%n)+n)%n;//获取x的最小正整数解
        ans.push_back(x*(b/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/033000-/p/10066054.html