扩展中国剩余定理 excrt
题面
关于
前言
正文
先拎出来两个方程看
转化一下
由裴属定理
条件是
由于负数对
上面那个式子用
不会
所以就能求出上式的
但你现在求出的数其实要
(由于上面的裴属定理)
那么我们现在求出了
就又多了一组方程
那么
用这个方程和第
最后的
代码
#include <bits/stdc++.h>
using namespace std;
#define int __int128
const int N=1e5+5;
int n,x,y,gcd,lcm;
struct node{int p,a;}e[N];
void exgcd(int a,int b){
if(b==0){
gcd=a,x=1,y=0;
return;
}
exgcd(b,a%b);
int o=x;
x=y;
y=o-a/b*y;
}
node excrt(node o1,node o2){
int a1=o1.a,a2=o2.a,p1=o1.p,p2=o2.p,x0;
exgcd(p1,p2);
//cout<<x<<endl;
assert((a2-a1)%gcd==0);
int c=(a2-a1)/gcd;
lcm=p1*p2/gcd;
x0=(x*p1*c+a1)%lcm;
if(x0<0)x0+=lcm;
return node{lcm,x0};
}
int read() {long long t; cin>>t; return t;}
signed main(){
n=read();
for(int i=1;i<=n;i++){
e[i].p=read(),e[i].a=read();
}
if(n==1){cout<<(long long)e[1].a;return 0;}
node ans=excrt(e[1],e[2]);
//cout<<ans.a<<" "<<ans.p<<endl;
for(int i=3;i<=n;i++){
ans=excrt(ans,e[i]);
}
cout<<(long long)ans.a;
return 0;
}
不会 & 的写法(至少现在不会了)
如果非要看的话请看本蒟蒻的早年代码
#include <bits/stdc++.h>
using namespace std;
#define int __int128
const int N=1e5+5;
int n;
struct node{
int b,a;
}ans,s[N];
int read() {long long t; cin>>t; return t;}
void exgcd(int a,int b,int &x,int &y,int &g)
{
if(!b) {x=1,y=0,g=a;return ;}
int x0,y0;
exgcd(b,a%b,x0,y0,g);
x=y0,y=x0-(a/b)*y0;
}
node excrt(node fi,node se)
{
int a1=fi.a,a2=se.a,b1=fi.b,b2=se.b,q1,q2,g,c,x,lcm;
exgcd(a1,a2,q1,q2,g);
cout<<(long long)q1<<endl;
assert((b2-b1)%g==0);
c=(b2-b1)/g;
lcm=a1/g*a2;
x=(q1*c*a1+b1)%lcm;
if(x<0) x+=lcm;
return (node){x,lcm};
}
signed main(){
n=read();
for(int i=1;i<=n;i++){
s[i].a=read();
s[i].b=read();
}
if(n==1)cout<<(long long)s[1].b<<endl,exit(0);
ans=excrt(s[1],s[2]);
cout<<(long long)ans.b<<" "<<(long long)ans.a<<endl;
for(int i=3;i<=n;i++){
ans=excrt(ans,s[i]);
}
cout<<(long long)ans.b;
return 0;
}
后记
吃饭时空出了
回忆……
小小水元素充盈一下
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战