HDU 1573 X问题(中国剩余定理标准解法)
X问题
Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 8354    Accepted Submission(s): 3031
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
| linle | We have carefully selected several similar problems for you: 1788 1695 1452 1060 1299 | 
中国剩余定理(a[i]不一定互质的情况):
	ans%a1=r1,ans%a2=r2,求最小的ans;
	解方程a1*x1+r1=a2*x2+r2;
	则a1*x1-a2*y1=r2-r1;
	利用拓展欧几里得解a1*x2-a2*y2=d;
	得出d=gcd(a1,a2);
	只有(r2-r1)%d=0时方程有解
	从而得出x1=x2*(r2-r1)/d,y1=y2*(r2-r1)/d;
	p=a2/d;
	a1*x1+a2*y1=r2-r1;
	a1*(x1+a2/d)-a2*(y1-a1/d)=r2-r1;
	x1=(x1*(r2-r1)%p+p)%p;//使x为最小的正整数解
	最终ans=a1*x1+r1;#include<iostream>
#define ll long long
using namespace std;
ll a[13],b[13];
void exgcd(ll m,ll n,ll &gcd,ll &x,ll &y){
        if(!n){
                gcd=m;//printf("gcd=%lld\n",gcd);
                x=1,y=0;
        }else{
                exgcd(n,m%n,gcd,x,y);
                ll tmp=x;
                x=y;
                y=tmp-(m/n)*y;
        }
}
int main()
{
        int T;
        scanf("%d",&T);
        while(T--){
                ll maxn,n;
                scanf("%lld%lld",&maxn,&n);
                for(int i=0;i<n;i++)
                        scanf("%lld",&a[i]);
                for(int i=0;i<n;i++)
                        scanf("%lld",&b[i]);
                bool flag=0;
                ll a1=a[0],b1=b[0];
                for(int i=1;i<n;i++)
                {
                        ll x,y,gcd,a2=a[i],b2=b[i];
                        exgcd(a1,a2,gcd,x,y);
                        if((b2-b1)%gcd){
                                flag=1;break;
                        }
                        ll k=(b2-b1)/gcd,p=a2/gcd;
                        x=(x*k%p+p)%p;//使x为最小的正整数解
                        b1=a1*x+b1;
                        a1=a1/gcd*a2;
                }
                if(flag||b1>maxn){
                        printf("0\n");
                }else{
                        int ans=b1?1:0;//b1=0时b1不能作为解
                        while(b1+a1<=maxn)
                                b1+=a1,ans++;
                        printf("%d\n",ans);
                }
        }
        return 0;
}
HDU 1573 X问题(中国剩余定理标准解法)的更多相关文章
- hdu  X问题 (中国剩余定理不互质)
		http://acm.hdu.edu.cn/showproblem.php?pid=1573 X问题 Time Limit: 1000/1000 MS (Java/Others) Memory ... 
- HDU 5768 Lucky7 (中国剩余定理 + 容斥 + 快速乘法)
		Lucky7 题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5768 Description When ?? was born, seven crow ... 
- HDU 5768 Lucky7 容斥原理+中国剩余定理(互质)
		分析: 因为满足任意一组pi和ai,即可使一个“幸运数”被“污染”,我们可以想到通过容斥来处理这个问题.当我们选定了一系列pi和ai后,题意转化为求[x,y]中被7整除余0,且被这一系列pi除余ai的 ... 
- hdu 5446 Unknown Treasure  中国剩余定理+lucas
		题目链接 求C(n, m)%p的值, n, m<=1e18, p = p1*p2*...pk. pi是质数. 先求出C(n, m)%pi的值, 然后这就是一个同余的式子. 用中国剩余定理求解. ... 
- HDU 3579 Hello Kiki 中国剩余定理(合并方程
		题意: 给定方程 res % 14 = 5 res % 57 = 56 求res 中国剩余定理裸题 #include<stdio.h> #include<string.h> # ... 
- hdu 3579 Hello Kiki (中国剩余定理)
		Hello Kiki Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ... 
- POJ 2891 Strange Way to Express Integers 中国剩余定理解法
		一种不断迭代,求新的求余方程的方法运用中国剩余定理. 总的来说,假设对方程操作.和这个定理的数学思想运用的不多的话.是非常困难的. 參照了这个博客的程序写的: http://scturtle.is-p ... 
- poj 1006:Biorhythms(水题,经典题,中国剩余定理)
		Biorhythms Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 110991 Accepted: 34541 Des ... 
- 中国剩余定理 hdu 1573 X问题
		HDU 1573 X问题 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Tota ... 
随机推荐
- 使用WinIo32绕过密码控件实现自动登录
			通过winIO32绕过密码控件,实现自动登录 环境: vmware上安装windows 32位系统:windows xp / windows 7 selenium版本: 3.11.0 IEDriver ... 
- ECharts.js学习(一) 简单入门
			EChart.js 简单入门 最近有一个统计的项目要做,在前端的数据需要用图表的形式展示.网上搜索了一下,发现有几种统计图库. MSChart 这个是Visual Studio里的自带控件,使用比 ... 
- PF部分代码解读
			// 单个粒子数据结构 typedef struct { // 粒子状态 pf_vector_t pose; // 粒子权重 double weight; } pf_sample_t; // Info ... 
- 查询tensorflow中的函数用法
			一下均在ubuntu环境下: (1)方法一,使用help()函数: 比如对于tf.placeholder(),在命令行中输入import tensorflow as tf , help(tf.plac ... 
- Aurelius vs mORMot vs EntityDAC   Delphi 的 ORM框架
			Aurelius vs mORMot vs EntityDAC Delphi 的 ORM框架: http://www.tmssoftware.com/site/aurelius.asp#produ ... 
- Winform调用百度地图接口简单示例
			1.首先用一个html文件调用百度地图接口(主要注册一个序列号): <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitiona ... 
- mysql数据库基于linux的安装步骤及数据库操作
			一.数据库安装 Ubuntu上安装MySQL非常简单只需要几条命令就可以完成. sudo apt-get install mysql-server sudo apt-get isntall mysql ... 
- shell 学习之if语句
			bash中如何实现条件判断?条件测试类型: 整数测试 字符测试 文件测试 一.条件测试的表达式: [ expression ] 括号两端必须要有空格 [[ expres ... 
- 【原创】大叔问题定位分享(32)mysql故障恢复
			mysql启动失败,一直crash,报错如下: 2019-03-14T11:15:12.937923Z 0 [Note] InnoDB: Uncompressed page, stored check ... 
- Struts2,springMVC获取request和response
			springMVC获取request和response1:在BaseController中加入: protected HttpServletRequest request; protected H ... 
