499div2-E Border :裴蜀定理

这个定理就像类似学扩展欧几里得判断是否有解的条件,当时是ax+by = c;仅当c = k*gcd(a,b)时有解,其实也就是只要是公约数的倍数就行。

而裴蜀定理是多个未知量x1*a1+x2*a2+...xn*an = c, 也是仅当 c = k * gcd(a1, a2....an)时有解。

 

思路:求出gcd,然后枚举所有解的可能就行了。也就是令k = 1 2 3 .... 

下面的代码枚举到k是因为,枚举到k+1时和枚举1时一样的,(gcd*k + gcd)% k = gcd%k;

 

#include <bits/stdc++.h>
#define ll long long
using namespace std;

set<int> ma;
int main(){
    ll n, k, x, g;
    cin >> n >> k >> g;
    for(int i = 2; i <= n; i++){
        cin >> x;
        g = __gcd(g, x);
    }
    for(ll i = 1; i <= k; i++) ma.insert(i*g%k);
    cout << ma.size() << endl;
    for(auto it = ma.begin(); it != ma.end(); it++)
        cout << *it << ' ';
    return 0;
}

 

转载于:https://www.cnblogs.com/philo-zhou/p/11348581.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值