X问题

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

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
 
  1. #include <iostream>
  2. #include<stdio.h>
  3. #include <algorithm>
  4. #include<string.h>
  5. #include<cstring>
  6. #include<math.h>
  7. #define inf 0x3f3f3f3f
  8. #define ll long long
  9. using namespace std;
  10.  
  11. int a[];
  12. int r[];
  13. int n,m,x,y;
  14. int lcm;
  15. int gcd;
  16.  
  17. int exgcd(int a,int b,int &x,int &y)
  18. {
  19. if(b==)
  20. {
  21. x=;
  22. y=;
  23. return a;
  24. }
  25. int q=exgcd(b,a%b,y,x);
  26. y=y-(a/b)*x;
  27. return q;
  28. }
  29.  
  30. int main()
  31. {
  32. int t;
  33. scanf("%d",&t);
  34. while(t--)
  35. {
  36. bool flag=true;
  37. scanf("%d%d",&n,&m);
  38. for(int i=;i<m;i++)
  39. scanf("%d",&a[i]);
  40. for(int i=;i<m;i++)
  41. scanf("%d",&r[i]);
  42. int a1=a[];
  43. int r1=r[];
  44.  
  45. for(int i=;i<m;i++)
  46. {
  47. //printf("facai\n");
  48. int b1=a[i];
  49. int r2=r[i];
  50. gcd=exgcd(a1,b1,x,y);
  51. int d=r2-r1;
  52. if(d%gcd)//无解
  53. {flag=false;break;}
  54. int multiple=d/gcd;
  55. int p=b1/gcd;
  56. x=( (x*multiple)%p+p )%p;//最小正数解
  57. r1=x*a1+r1;//合并后更新余数
  58. a1=a1*b1/gcd;//更新除数为两者的最小公倍数
  59. }
  60. ///联立完所有的式子后,a1=lcm,r1也是终极余数
  61. ///求满足的k的数量 0<r1+lcm*k<=n
  62. ///k=(n-r1)/lcm , 但是当r1=0时,k=0不能算进答案
  63. if(r1 > n) flag = false;
  64. int ans=;
  65. if(flag)
  66. {
  67. ans=+(n-r1)/a1;///k=0也算一个
  68. if(ans && r1==) ans--;///ans至少要有一个才能自减,不然可能变成-1了
  69. printf("%d\n",ans);
  70. }
  71. else
  72. printf("%d\n",ans);
  73. }
  74. return ;
  75. }

hdu1573-X问题-(扩展欧几里得定理+中国剩余定理)的更多相关文章

  1. hdu3579-Hello Kiki-(扩展欧几里得定理+中国剩余定理)

    Hello Kiki Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total ...

  2. hdu2669-Romantic-(扩展欧几里得定理)

    Romantic Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Su ...

  3. poj1061-青蛙的约会-(贝祖定理+扩展欧几里得定理+同余定理)

    青蛙的约会 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions:132162   Accepted: 29199 Descripti ...

  4. poj 1061(扩展欧几里得定理求不定方程)

    两只青蛙在网上相识了,它们聊得很开心,于是觉得很有必要见一面.它们很高兴地发现它们住在同一条纬度线上,于是它们约定各自朝西跳,直到碰面为止.可是它们出发之前忘记了一件很重要的事情,既没有问清楚对方的特 ...

  5. HDU 2669 Romantic (扩展欧几里得定理)

    Romantic Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Su ...

  6. 扩展欧几里得 求ax+by == n的非负整数解个数

    求解形如ax+by == n (a,b已知)的方程的非负整数解个数时,需要用到扩展欧几里得定理,先求出最小的x的值,然后通过处理剩下的区间长度即可得到答案. 放出模板: ll gcd(ll a, ll ...

  7. exgcd扩展欧几里得求解的个数

    知识储备 扩展欧几里得定理 欧几里得定理 (未掌握的话请移步[扩展欧几里得]) 正题 设存在ax+by=gcd(a,b),求x,y.我们已经知道了用扩欧求解的方法是递归,终止条件是x==1,y==0: ...

  8. AC Codeforces Round #499 (Div. 2) E. Border 扩展欧几里得

    没想出来QAQ....QAQ....QAQ.... 对于一般情况,我们知道 ax+by=gcd(a,b)ax+by=gcd(a,b)ax+by=gcd(a,b) 时方程是一定有解的. 如果改成 ax+ ...

  9. CSU 1446 Modified LCS 扩展欧几里得

    要死了,这个题竟然做了两天……各种奇葩的错误…… HNU的12831也是这个题. 题意: 给你两个等差数列,求这两个数列的公共元素的数量. 每个数列按照以下格式给出: N F D(分别表示每个数列的长 ...

随机推荐

  1. FastDFS+Nginx+fastdfs-nginx-module集群搭建

    一.实验环境说明 操作系统: Centos 6.6 x64 FastDFS 相关版本: fastdfs-5.05 fastdfs-nginx-module-v1.16 libfastcommon-v1 ...

  2. 关于百度world 编辑器改变上传图片的保存路径图片不显示的问题

    在ueditor.mini for asp.net 中,将上传的图片保存的路径更改了,可图片在 world 编辑器中不显示,但却可以上传到指定的保存目录下,解决这个问题的方法 是: 在udditor_ ...

  3. uva-10954-贪心

    题意:俩个数相加,产生的和就是这次加法的代价,问,所有数都加起来,最小代价是多少 解题思路:贪心,每次都选取最小俩个数相加,如果只有一个数,计算完毕,注意,加法的和要再次入队列. #include & ...

  4. python if all

    #encoding:utf-8 s=['1','9']sta='56789'# if all(t not in sta for t in s):#     print staif all(t not ...

  5. js:浏览器插件

    1.chrome background.js //chrome.webRequest.onBeforeRequest.addListener(function(info) { // chrome.ta ...

  6. java reflect反射调用方法invoke

    类定义 package Reflect; public class MyTest { public int a; public static int b; public static final in ...

  7. $tojson和json.stringify的区别

    JSON.stringify(),将value(Object,Array,String,Number...)序列化为JSON字符串 JSON.parse(), 将JSON数据解析为js原生值 toJS ...

  8. vue全局变量定义和修改

    1. 只读的全局变量 对于只读的全局变量,知道的有以下两种使用方式: 1)global.js 模块中定义:其他模块import后再使用即可 1.1)定义 import Vue from 'vue'; ...

  9. Java快速开发平台强大的代码生成器,JEECG 3.7.5 VUE+ElementUI SPA单页面应用版本发布

    JEECG 3.7.5 VUE+ElementUI SPA单页面应用版本发布 此版本为Vue+ElementUI SPA单页面应用版本,提供新一代风格代码生成器模板,采用Vue技术,提供两套精美模板E ...

  10. C#利用CDO.Message发送邮件

    如何引用CDO.Message? cod.message的引用位置: C:\Windows\System32\cdosys.dll CDO.Message objMail = new CDO.Mess ...