hdu_1573 X问题(不互素的中国剩余定理)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1573
X问题
Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 5012 Accepted Submission(s): 1667
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
0
3
题解:
这个题直接给出了中国剩余定理的形式:X===a[i](mod b[i])但是这里注意一下这个b[i]之间有可能不是互素的,所以这里给出一个不互素的中国剩余定理的求解方式
考虑两个方程
x===a1(mod b1)
x===a2(mod b2)
可得:x = a1+b1*r1;
x = a2+b2*r2;
有 a1+b1*r1 = a2+b2*r2;
有b1*r1-b2*r2 = a2-a1
这样可以通过扩展欧几里得解的r1,这里注意一下(a2-a1)%gcd(b1,b2)==0时候有解
解出r1后则x0 = a1+b1*r1位这个方程组的一个解
则这两个方程可以写成是x===x0(mod b1*b2/gcd(b1,b2))的形式
然后依次处理没两个式子,最后得到的就是解
注意这里每次求得的解都要保证是最小的解的形式,所以可以通过用(x%mod+mod)%mod 的形式来控制
最后统计次数的时候从最小的时候循环到n即可统计出个数
代码:
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
#define ll long long
ll a[],b[];
ll exgcd(ll a, ll b, int &x, int &y)
{
if(b==){
x = ;
y = ;
return a;
}
ll ans = exgcd(b,a%b,x,y);
int tx = x;
x = y;
y = tx-(a/b)*y;
return ans;
} int main()
{
int T;
scanf("%d",&T);
while(T--)
{
ll n,m;
scanf("%lld%lld",&n,&m);
for(int i = ; i < m; i++){
scanf("%lld",&a[i]);
}
for(int i = ; i < m; i++){
scanf("%lld",&b[i]);
}
bool fl = ;
for(int i = ; i < m; i++){
//更新a[i]和b[i];
int x, y;
ll d = exgcd(a[i-],a[i],x,y);
if((b[i]-b[i-])%d){
fl = true;
break;
}
ll t = a[i]/d;
x = x*(b[i]-b[i-])/d;
x = (x%t+t)%t;
ll N = a[i-]*x+b[i-];
b[i] = N;
a[i] = a[i]*a[i-]/d;
b[i] = (b[i]%a[i]+a[i])%a[i];
}
if(fl||n<b[m-]) printf("0\n");
else printf("%d\n",(n-b[m-])/a[m-]+-(b[m-]==?:));//因为要求是正整数,所以0不可以取
}
return ;
}
hdu_1573 X问题(不互素的中国剩余定理)的更多相关文章
- hdu_1370Biorhythms(互素的中国剩余定理)
Biorhythms Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total ...
- hdu1573X问题(不互素的中国剩余定理)
X问题 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submis ...
- 数论F - Strange Way to Express Integers(不互素的的中国剩余定理)
F - Strange Way to Express Integers Time Limit:1000MS Memory Limit:131072KB 64bit IO Format: ...
- POJ 2891 中国剩余定理(不互素)
Strange Way to Express Integers Time Limit: 1000MS Memory Limit: 131072K Total Submissions: 17877 ...
- hdu 3579 Hello Kiki【中国剩余定理】(模数不要求互素)(模板题)
<题目链接> 题目大意: 给你一些模数和余数,让你求出满足这些要求的最小的数的值. 解题分析: 中国剩余定理(模数不一定互质)模板题 #include<stdio.h> usi ...
- ACM/ICPC 之 中国剩余定理+容斥原理(HDU5768)
二进制枚举+容斥原理+中国剩余定理 #include<iostream> #include<cstring> #include<cstdio> #include&l ...
- 中国剩余定理(Chinese Remainder Theorem)
我理解的中国剩余定理的含义是:给定一个数除以一系列互素的数${p_1}, \cdots ,{p_n}$的余数,那么这个数除以这组素数之积($N = {p_1} \times \cdots \tim ...
- 【中国剩余定理】【容斥原理】【快速乘法】【数论】HDU 5768 Lucky7
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5768 题目大意: T组数据,求L~R中满足:1.是7的倍数,2.对n个素数有 %pi!=ai 的数 ...
- 【中国剩余定理】POJ 1006 & HDU 1370 Biorhythms
题目链接: http://poj.org/problem?id=1006 http://acm.hdu.edu.cn/showproblem.php?pid=1370 题目大意: (X+d)%23=a ...
随机推荐
- [数据结构]C语言队列的实现
我个人把链表.队列.栈分为一类,然后图.树分为一类.(串不考虑),分类的理由就是每一类有规律可循,即你能通过修改极少数的代码把链表变成队列.栈.(这里我们不考虑其他诸如设计模式等因素),因此本贴在讲完 ...
- JavaWeb之数据源连接池(2)---C3P0
我们接着<JavaWeb之数据源连接池(1)---DBCP>继续介绍数据源连接池. 首先,在Web项目的WebContent--->WEB-INF--->lib文件夹中添加C3 ...
- MySQL MVCC机制
本文同时发表在https://github.com/zhangyachen/zhangyachen.github.io/issues/68 行结构 每一行额外包含三个隐藏字段: DB_TRX_ID:事 ...
- Docker安装入门 -- 应用镜像
Docker安装入门 -- 应用镜像 WordPress 1.docker build -t csphere/wordpress:4.2 . 2.docker run -d -p 80:80 -- ...
- BOOTPROTO=[none|static|bootp|dhcp](引导时不使用协议|静态分配|BOOTP协议|DHCP协议)
BOOTPROTO=[none|static|bootp|dhcp](引导时不使用协议|静态分配|BOOTP协议|DHCP协议)
- 如何写一个SSH项目(三)如何进行交互的
下面以登录为例子,展示从前台到后端的一整套流程并进行分析. 首先介绍一下我的SSH的分层结构 action和service一起是业务逻辑层 action层调用service层 dao ...
- Linux_异常_08_本机无法访问虚拟机web等工程
这是因为防火墙的原因,把响应端口开启就行了. # Firewall configuration written by system-config-firewall # Manual customiz ...
- Javascript高级程序设计笔记 <第五章> 引用类型
一.object类型 创建object实例的方式有两种: //第一种使用new操作符跟构造函数 var person= new Object(); person.name="小王" ...
- 【读书笔记】A Swift Tour
素材:A Swift Tour 推荐下载Playground:Download Playground objc 自己较为熟悉,想熟悉下风头正劲的 swift.就先从官方的入门手册开始撸. 每一小节,我 ...
- angular4.0使用JSONP数据请求
ng4中有很多获取数据的API,为了满足跨域的需求,我选择JSONP模块: 应该有很多小伙伴遇到这个报错吧 injected script did not invoke callback: 下面我写个 ...