HDU——T 1573 X问题

http://acm.hdu.edu.cn/showproblem.php?pid=1573

Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 6718    Accepted Submission(s): 2342

Problem Description

求在小于等于N的正整数中有多少个X满足:X mod a[0] = b[0], X mod a[1] = b[1], X mod a[2] = b[2], …, X mod a[i] = b[i], … (0 < a[i] <= 10)。

Input

输入数据的第一行为一个正整数T,表示有T组测试数据。每组测试数据的第一行为两个正整数N,M (0 < N <= 1000,000,000 , 0 < M <= 10),表示X小于等于N,数组a和b中各有M个元素。接下来两行,每行各有M个正整数,分别为a和b中的元素。

Output

对应每一组输入,在独立一行中输出一个正整数,表示满足条件的X的个数。

Sample Input

3
10 3
1 2 3
0 1 2
100 7
3 4 5 6 7 8 9
1 2 3 4 5 6 7
10000 10
1 2 3 4 5 6 7 8 9 10
0 1 2 3 4 5 6 7 8 9

Sample Output

1
0
3

Author

lwg

Source

HDU 2007-1 Programming Contest

 1 #include <algorithm>
 2 #include <cstdio>
 3
 4 using namespace std;
 5
 6 const int N(1000000001);
 7 int n,m,a[11],b[11],tot;
 8
 9 int exgcd(int a,int b,int &x,int &y)
10 {
11     if(!b)
12     {
13         x=1; y=0;
14         return a;
15     }
16     int ret=exgcd(b,a%b,x,y),tmp=x;
17     x=y; y=tmp-a/b*y;
18     return ret;
19 }
20 int CRT()
21 {
22     int ret=b[1]; tot=a[1];
23     for(int i=2;i<=m;i++)
24     {
25         int x,y,tmp;
26         int c=b[i]-ret;
27         int gcd=exgcd(tot,a[i],x,y);
28         if(c%gcd) return N;
29         x=x*c/gcd;
30         int mod=a[i]/gcd;
31         x=(x%mod+mod)%mod;
32         ret+=tot*x; tot*=mod;
33     }
34     if(!ret) ret+=tot;
35     return ret;
36 }
37
38 int main()
39 {
40     int t; scanf("%d",&t);
41     for(int ans=0;t--;ans=0)
42     {
43         scanf("%d%d",&n,&m);
44         for(int i=1;i<=m;i++) scanf("%d",a+i);
45         for(int i=1;i<=m;i++) scanf("%d",b+i);
46         int tmp=CRT();
47         for(;tmp<=n;tmp+=tot) ans++;
48         printf("%d\n",ans);
49     }
50     return 0;
51 }
时间: 2024-10-28 23:51:38

HDU——T 1573 X问题的相关文章

HDU 1573 X问题

http://acm.hdu.edu.cn/showproblem.php?pid=1573 解出最小解rr后,特判下其是否为0,为0的话,就直接n / lcm 否则 + 1 #include <cstdio> #include <cstdlib> #include <cstring> #include <cmath> #include <algorithm> using namespace std; #define inf (0x3f3f3f3

HDU 1573 CRT

CRT模板题 /** @Date : 2017-09-15 13:52:21 * @FileName: HDU 1573 CRT EXGCD.cpp * @Platform: Windows * @Author : Lweleth ([email protected]) * @Link : https://github.com/ * @Version : $Id$ */ #include <bits/stdc++.h> #define LL long long #define PII pair

HDU 1573 X问题 中国剩余定理

链接:http://acm.hdu.edu.cn/showproblem.php?pid=1573 题意:求在小于等于N的正整数中有多少个X满足:X mod a[0] = b[0], X mod a[1] = b[1], X mod a[2] = b[2], -, X mod a[i] = b[i], - (0 < a[i] <= 10). 思路:中国剩余定理的模板题,如果找不到这样的数或者最小的X大于N,输出零. 代码: #include <iostream> #include

中国剩余定理 hdu 1573 X问题

HDU 1573 X问题 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 4857    Accepted Submission(s): 1611 Problem Description 求在小于等于N的正整数中有多少个X满足:X mod a[0] = b[0], X mod a[1] = b[1], X mod a[2] = b[2],

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

X问题 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 2980    Accepted Submission(s): 942 Problem Description 求在小于等于N的正整数中有多少个X满足:X mod a[0] = b[0], X mod a[1] = b[1], X mod a[2] = b[2], …, X mod

HDU——1573 X问题

X问题 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 6716    Accepted Submission(s): 2340 Problem Description 求在小于等于N的正整数中有多少个X满足:X mod a[0] = b[0], X mod a[1] = b[1], X mod a[2] = b[2], …, X mo

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

题目链接 题意 : 中文题不详述. 思路 : 中国剩余定理.求中国剩余定理中解的个数.看这里看这里 1 //1573 2 #include <stdio.h> 3 #include <iostream> 4 #include <math.h> 5 6 using namespace std ; 7 8 long long x,y ; 9 long long N,M ; 10 11 long long ext_gcd(long long a,long long b) 12

X问题 HDU - 1573(excrt入门题)

X问题 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 8365    Accepted Submission(s): 3037 Problem Description 求在小于等于N的正整数中有多少个X满足:X mod a[0] = b[0], X mod a[1] = b[1], X mod a[2] = b[2], -, X mod

HDU 1573 模线性方程

给定模线性方程组,求最终的值的通解.点击 两个模方程可以化解成一个模方程 x mod a1 = b1 x mod a2 = b2 a1*k1 + a2*k2 = b2 – b1 // 其中k1k2是自由元 用扩展欧几里得算出k1的解,当然它是一个解系,找出最小k1作为特解,带入x = a1 * k1 + b1得到x 然后把这个x当作特解,记作x1. 之前k1本来是一个解系,他的模是a2/gcd(a1,a2),[简单将gcd(a1,a2)记作t], 也就是说k1如果作为一个解系的话,k1 = a2