HDU 1573 X问题 求同余方程组解的个数
来源:互联网 发布:我的体育老师 知乎 编辑:程序博客网 时间:2024/04/30 03:52
点击打开链接
X问题
Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 2771 Accepted Submission(s): 881
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
310 31 2 30 1 2100 73 4 5 6 7 8 91 2 3 4 5 6 710000 101 2 3 4 5 6 7 8 9 100 1 2 3 4 5 6 7 8 9
Sample Output
103
Author
lwg
Source
HDU 2007-1 Programming Contest
判断同余方程组在某个范围内解的个数问题。令b数组中所有数的最小公倍数是lcm,方程在lcm范围内的非负整数解是a,则有a+lcm*x<=n,若a!=0那么解得的x即为要求的解的个数,否则x-1即为所求。
//0MS232K#include<stdio.h>long long A[17],B[17];long long a,b,c,a1,a2,r1,r2,x,y,k;int n,m;long long gcd(long long a,long long b){ return b==0?a:gcd(b,a%b);}long long exgcd(long long A,long long &x,long long B,long long &y){ long long x1,y1,x0,y0; x0=1; y0=0; x1=0; y1=1; long long r=(A%B+B)%B; long long q=(A-r)/B; x=0; y=1; while(r) { x=x0-q*x1; y=y0-q*y1; x0=x1; y0=y1; x1=x; y1=y; A=B; B=r; r=A%B; q=(A-r)/B; } return B;}long long solve(){ bool flag=1; a1=A[1];r1=B[1]; for(long long i=2; i<=m; i++) { a2=A[i]; r2=B[i]; a=a1; b=a2; c=r2-r1; long long d=exgcd(a,x,b,y); if(c%d!=0) { flag=0; } long long t=b/d; x=(x*(c/d)%t+t)%t; r1=a1*x+r1; a1=a1*(a2/d); } if(!flag)return -1; return r1;}int main(){ int t; scanf("%d",&t); while(t--) { long long n,lcm=1; scanf("%I64d%I64d",&n,&m); for(int i=1;i<=m;i++) { scanf("%I64d",&A[i]); lcm=lcm/gcd(lcm,A[i])*A[i]; } for(int i=1;i<=m;i++) scanf("%I64d",&B[i]); long long ans=solve(); if(ans==-1)printf("0\n"); else { ans=0; if(r1<=n)ans=1+(n-r1)/lcm; if(ans&&r1==0)ans--; printf("%lld\n",ans); } } return 0;}
0 0
- HDU 1573 X问题 求同余方程组解的个数
- hdu 1573: X问题(线性同余方程组求正整数解的个数)
- 求同余方程x^A=B(mod m)的解个数(原根与指标)
- HDU 1573 X问题(一元线性同余方程组)
- HDU 1573 X问题 [一元线性同余方程组]【数论】
- hdu 1573 X问题 水题 一元线性同余方程组
- HDU 1573 X问题 线性同余方程组模板
- hdu 1573 X问题(一元线性同余方程组)
- hdu 1573 X问题(解线性同余模方程组在给定取值范围的解)
- HDU1573 X问题 解同余方程组
- 带提交: hdu 1573 X问题(一元同余方程组)
- HDU1573X问题(同余方程组在某个范围内解得个数的问题)
- hdoj 1573 X问题 【CRT】【求解方程组在 N内正整数解的个数】
- Hdu 1573 线性同余方程组
- HDU1573X问题 解同余方程组问题
- 同余方程组问题
- HDU1573 X问题【一元线性同余方程组】
- hdu 1573(求区间内,同于方程组的解的个数)
- AsyncTask(笔记)
- 演示如何使用微软的CAPICOM组件
- eclipse的常用的设置
- ORACLE数据库SQL优化--->如何得到真实的执行计划
- 9-patch for Android UI
- HDU 1573 X问题 求同余方程组解的个数
- linux 用户、组 相关操作及说明
- 【视频处理工程】3、DirectShow基本开发过程(一)
- xamarin c#开发ios/android 应用
- android滑轮选择控件——whell
- 萧冬初驻北风寒
- jquery EasyUI中的MenuButton用法
- 整理了cacti安装和plugin安装
- C#WebService下载文件