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 ...
随机推荐
- python小练习,利用dict,做一个简单的登录。
'''利用字典实现登录'''users=[{'username':'jerry','pwd':'123456'},{'username':'tom','pwd':'1'}] def login(use ...
- Hibernate的学习(二)
---恢复内容开始--- 一.多表的建表原则 1.一对多的关系:例如 一个客户有多个联系人: 表与表一对多的关系:在一对多时,多的表中添加一个外键,用来和一的表的主键.产生联系. 2.多对多的关系:例 ...
- C++虚函数总结
为什么使用虚函数?什么是虚函数?虚函数是为了解决什么问题? 面向对象的三大特征: 封装 多态 继承 普通虚函数 虚析构函数 纯虚函数 抽象类 接口类 隐藏 vs 覆盖 隐藏与覆盖之间的关系 早绑定和晚 ...
- 集合排序 Comparator和Comparable的使用区别
Java 排序 Compare Comparator接口 Comparable接口 区别 在Java中使用集合来存储数据时非常常见的,集合排序功能也是常用功能之一.下面看一下如何进行集合排序,常用的 ...
- RTL8201EL介绍【转】
转自:https://blog.csdn.net/Firefly_cjd/article/details/79826698 本文为博主原创文章,未经博主允许不得转载. https://blog.csd ...
- python3+selenium入门13-操作cookie
可以把cookie理解为自己账户的身份证.因为http协议是无状态的,上一个请求和下一个请求没有关系.但是有时需要有关联.比如登录之后,才能进行操作这样的设置.这个就是cookie在起作用.登录成功时 ...
- requests库入门11-重定向和请求历史
默认情况下,除了head请求,requests会自动处理重定向 重定向就是会把url重新指定到另一个.比如github,使用http会自动重定向到https.一些公司也会使用网关啥的做重定向. r = ...
- mq for aix 清理步骤
删除所有相关进程smit remove 删除mq删除mqm用户和用户组 如果unmount /cdrom 卸载不掉的话使用 fuser -xcu /cdrom rm /var/mqm
- Markdown中Latex 数学公式基本语法
原文地址:http://blog.csdn.net/u014630987/article/details/70156489 Markdown中Latex 数学公式基本语法 公式排版 分为两种排版: - ...
- Openssl源代码整理学习
一.基础知识 1.Openssl 简史 OpenSSL项目是加拿大人Eric A.Yang 和Tim J.Hudson开发,现在有Openssl项目小组负责改进和维护:他们是全球一些技术精湛的志愿技术 ...