P3868 [TJOI2009]猜数字
中国剩余定理
求解i=1 to n : x≡a[i] (mod b[i])的同余方程组
设 t= ∏i=1 to n b[i]
我们先求出 i=1 to n : x≡1 (mod b[i]) ; j=1 to n,j≠i : x≡0 (mod b[j])的解
我们可以 把 t/b[i] y 代入 x 求解
ans= ∑i=1 to n : x[i]a[i]
中间过程可能爆long long所以用快速乘
(当然模数不互质的话就只能excrt了)
#include<iostream>
#include<cctype>
using namespace std;
typedef long long ll;
ll n,A[],B[],lcm,t=,X,Y,ans,m;
inline ll kmul(ll x,ll y){ //快速乘
ll tmp=x*y-(ll)((long double)x/t*y+1.0e-8)*t;
return tmp> ? tmp:tmp+t;
}
void exgcd(ll a,ll b,ll &x,ll &y){
if(!b) x=,y=;
else exgcd(b,a%b,y,x),y-=x*(a/b);
}
int main(){
cin>>n;
for(int i=;i<=n;++i) cin>>A[i];
for(int i=;i<=n;++i) cin>>B[i],t*=B[i];
for(int i=;i<=n;++i){
exgcd(B[i],m=t/B[i],X,Y);
ans=(ans+kmul(kmul(m,Y),A[i])%t+t)%t;
}cout<<ans;
}
P3868 [TJOI2009]猜数字的更多相关文章
- Luogu P3868 [TJOI2009]猜数字
题目链接 \(Click\) \(Here\) 中国剩余定理的板子.小心取模. #include <bits/stdc++.h> using namespace std; const in ...
- 洛谷P3868 [TJOI2009]猜数字(中国剩余定理,扩展欧几里德)
洛谷题目传送门 90分WA第二个点的看过来! 简要介绍一下中国剩余定理 中国剩余定理,就是用来求解这样的问题: 假定以下出现数都是自然数,对于一个线性同余方程组(其中\(\forall i,j\in[ ...
- 洛谷 P3868 [TJOI2009]猜数字
题意简述 给定\(a[1],a[2],\cdots,a[n]\) 和 \(b[1],b[2],\cdots,b[n]\),其中\(b\)中元素两两互素. 求最小的非负整数\(n\),满足对于任意的\( ...
- CRT【p3868】[TJOI2009]猜数字
Description 现有两组数字,每组k个,第一组中的数字分别为:a1,a2,...,ak表示,第二组中的数字分别用b1,b2,...,bk表示.其中第二组中的数字是两两互素的.求最小的非负整数n ...
- [TJOI2009]猜数字
题目描述 现有两组数字,每组k个,第一组中的数字分别为:a1,a2,...,ak表示,第二组中的数字分别用b1,b2,...,bk表示.其中第二组中的数字是两两互素的.求最小的非负整数n,满足对于任意 ...
- [Luogu3868] [TJOI2009]猜数字
题目描述 现有两组数字,每组k个,第一组中的数字分别为:a1,a2,...,ak表示,第二组中的数字分别用b1,b2,...,bk表示.其中第二组中的数字是两两互素的.求最小的非负整数n,满足对于任意 ...
- [TJOI2009]猜数字(洛谷 3868)
题目描述 现有两组数字,每组k个,第一组中的数字分别为:a1,a2,...,ak表示,第二组中的数字分别用b1,b2,...,bk表示.其中第二组中的数字是两两互素的.求最小的非负整数n,满足对于任意 ...
- [TJOI2009] 猜数字 - 中国剩余定理
现有两组数字,每组k个,第一组中的数字分别为:a1,a2,...,ak表示,第二组中的数字分别用b1,b2,...,bk表示.其中第二组中的数字是两两互素的.求最小的非负整数n,满足对于任意的i,n ...
- C语言猜数字游戏
猜数字游戏,各式各样的实现方式,我这边提供一个实现方式,希望可以帮到新手. 老程序猿就不要看了,黑呵呵 源代码1 include stdio.h include stdlib.h include ti ...
随机推荐
- CCCC L2-013. 红色警报 连通分量
题解:将问题转化成连通分量.每次失去一座城市,切断其所有的边,算一次现在的连通分量.若增量大于1,则发出警报. 至于如何算连通分量,直接用tarjan模板 坑://我昨天晚上半夜敲的模板,把一个算所有 ...
- Oracle管理监控之检查数据库和日常维护数据库
linux系统的系统日志一般位于/var/log目录下.linux的系统日志由一个叫syslog的进程管理的,如下日志都是由syslog服务驱动的. /var/log/ messages:记录linu ...
- Iwconfig/aircrack-ng
BT5 aircrack-ng破解无线密码(wpa/wep) - 星明月稀 - 博客频道 - CSDN.NET BT5 aircrack-ng破解无线密码(wpa/wep) - ...
- Making the Grade---poj3666(dp)
题目链接:http://poj.org/problem?id=3666 题意:有一个n个数的序列a,现在要把这些序列变成单调增的或者单调减的序列 b , 其价值为|A1 - B1| + |A2 - B ...
- java进程和线程的区别
什么是进程,什么是线程系统要做一件事,运行一个任务,所有运行的任务通常就是一个程序:每个运行中的程序就是一个进程,这一点在任务管理器上面可以形象的看到.当一个程序运行时,内部可能会包含多个顺序执行流, ...
- 读取Linux上图片
/** * 读取图片 * @param path * @param response * @throws Exception */ public static void showImg(String ...
- easyUI的datebox添加清空按钮功能
需要修改源码: 第一步:按下图修改 第二步:按下两图修改(*zh_CN.js)
- js实现轮播图2
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- JavaScript循环练习2
折纸:折多少次和珠穆朗玛峰一样高1.一张纸的厚度是0.0001米,将纸对折,对折多少次厚度超过珠峰高度8848米 var hou = 0.0001; var cishu = 0; for(var i= ...
- windows脚本的if语句