CF338D GCD Table 题解
1.P5192 Zoj3229 Shoot the Bullet|东方文花帖|【模板】有源汇上下界最大流2.Phi的反函数3.魔力屏障 (magic) 题解
4.CF338D GCD Table 题解
5.[AGC055B] ABC Supremacy 题解6.[AGC055A] ABC Identity 题解7.QOJ 6504. CCPC Final 2022 D Flower's Land 2题解8.[SDOI2010] 代码拍卖会 题解9.PERIODNI - Periodni 题解 & 笛卡尔树讲解 & 树状背包讲解10.Burnside 定理11.ZS Shuffles Cards 题解CF338D GCD Table 题解
题目描述
你有一个长度为
询问是否存在
解析
我们转换一下可以得到:
前面一个
经典扩展中国剩余定理。
但是我们因为分开考虑的
我们需要再次验证一下。
温馨提示
1.在运算过程中会爆 long long
需要龟速乘。
2.在运算过程中最大公倍数也就是 long long
,我们需要判断一下有没有超过
3.计算
考虑
还表示了 数列的最大公倍数
代码
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int N = 1e4 + 10;
int k;
ll n, m, a[N], x = 1,y = 0,M;
ll mmul(ll x,ll k,ll p){
ll ans = 0,d = x;
while(k){
if(k & 1) ans = (ans + d) % p;
k >>= 1;
d = d * 2 % p;
}
return ans;
}
ll gcd(ll a,ll b){
if(b == 0) return a;
return gcd(b, a % b);
}
void exgcd(ll a,ll b,ll &x,ll &y){
if(b == 0){
x = 1,y = 0;
return ;
}
exgcd(b, a % b, x, y);
ll z = x;
x = y;
y = z - (a / b) * y;
}
ll jfc(ll a,ll b,ll c){
ll x = 0,y = 0,g;
g = gcd(a,b);
a /= g,b /= g;
if(c % g) return -1;
exgcd(a, b, x, y);
return mmul((x % b + b) % b,c / g,b);
}
void input(){
cin>>n>>m>>k;
for(int i = 1; i <= k; ++i){
cin>>a[i];
}
}
bool op(){
for(int i = 1;i <= k; ++i){
ll now = jfc(x,a[i],(((1 - i + a[i]- y) % a[i] + a[i]) % a[i]));
if(now == -1) return 0;
y = (mmul(now,x,x * a[i] / gcd(x,a[i])) + y) % (x * a[i] / gcd(x,a[i]));
x = x * a[i] / gcd(x,a[i]);
if(x > n) return 0;
}
if(y == 0) y = x;
if((y + k - 1) > m) return 0;
return 1;
}
bool pd(){
for(int i = 1;i <= k; ++i){
ll now = gcd(x,y + i * 1ll - 1ll);
if(now != a[i]) return 0 ;
}
return 1;
}
int main(){
input();
if(op() && pd()){
cout<<"YES";
}else{
cout<<"NO";
}
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!