HDU 1573 X问题 (中国剩余定理非互质)

来源:互联网 发布:传感器网络的目标跟踪 编辑:程序博客网 时间:2024/05/16 18:11

#include <map>#include <stack>#include <queue>#include <deque>#include <cmath>#include <vector>#include <string>#include <cstdio>#include <cstdlib>#include <cstring>#include <iostream>#include <algorithm>using namespace std;#define L(i) i<<1#define R(i) i<<1|1#define INF  0x3f3f3f3f#define pi acos(-1.0)#define eps 1e-12#define maxn 100100#define MOD 1000000007#define ll long longll T,n,m,a[11],b[11],x,y,gcd;void E_gcd(ll ai,ll bi){    if(!bi)    {        x = 1;        y = 0;        gcd = ai;        return;    }    E_gcd(bi,ai%bi);    ll tmp = x;    x = y;    y = tmp - ai / bi * y;}int main(){    cin >> T;    while(T--)    {        cin>>n>>m;        for(int i = 1; i <= m; i++)            cin >> a[i];        for(int i = 1; i <= m; i++)            cin >> b[i];        int flag = 0;        ll a1 = a[1],b1 = b[1];        for(int i = 2; i <= m; i++)        {            ll a2 = a[i],b2 = b[i];            E_gcd(a1,a2);            if((b2-b1) % gcd)            {                flag = 1;                break;            }            x *= ((b2 - b1) / gcd);            ll t = a2 / gcd;            x = (x % t + t) % t;            b1 += a1 * x;            a1 = (a1 * a2 / gcd);            b1 = (b1 % a1 + a1) % a1;        }        if(flag || b1 > n)            cout<<"0"<<endl;        else            cout<<(n-b1)/a1+1-(!b1?1:0)<<endl;    }}


0 0
原创粉丝点击