同余问题+一本通题解
基本概念
同余
欧拉定理
欧拉定理推论及扩展欧拉定理
扩欧不会证(悲
费马小定理
ps:这里对费马小定理的证明需要使用欧拉定理,建议先学习欧拉定理
扩展欧几里得算法
注意:ybt上的题解写的是错误的,我的博客也被误导了,将下文中所有
代码:
void exgcd(int a,int b,int &x,int &y){
if(!b){
x=1,y=0;
return;
}
exgcd(b,a%b,x,y);
int g=y;
y=x-(a/b)*y;
x=g;
return;
}
线性同余方程
乘法逆元
中国剩余定理
T1:
扩展欧几里得求解
T2:
如果
当我们把所有质因数的这些和相乘时,我们实际上是在组合所有可能的选择来形成
然后对于每一个
等比数列求和公式证明:
然后如何用根号的复杂度求一个数的质因子呢?
首先考虑一个数至多只有一个大于其根号的质因子,我们只要枚举
看代码更方便理解:
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int mod=9901,N=50000;
int a,b,cnt,ans=1;
int lg[N],p[N],num[N];
int quickpow(int x,int k){
int g=1;
lg[0]=x;
for(int i=1;i<=30;i++){
lg[i]=lg[i-1]*lg[i-1]%mod;
}
for(int i=0;i<=30;i++){
if(!((k>>i)&1)) continue;
g=g*lg[i]%mod;
}
return g;
}
signed main(){
scanf("%lld%lld",&a,&b);
for(int i=2;i*i<=a;i++){
if(a%i==0){
cnt++;
p[cnt]=i;
while(a%i==0){
num[cnt]++;
a/=i;
}
}
}
if(a>1){
cnt++;
p[cnt]=a;
num[cnt]++;
}
for(int i=1;i<=cnt;i++){
// printf("%lld %lld\n",p[i],num[i]);
ans=ans*(quickpow(p[i],b*num[i]+1)%mod-1+mod)%mod*(quickpow(p[i]-1,mod-2))%mod;
}
printf("%lld",ans);
}
T3:
在乘法逆元中有讲,注意开long long
T4:
见上文中国剩余定理
代码:
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=15;
int n,M=1,x,y,ans;
int m[N],a[N],k[N],c[N];
void exgcd(int a,int b,int &x,int &y){
if(!b){
x=1,y=0;
return;
}
exgcd(b,a%b,x,y);
int g=y;
y=x-(a/b)*y;
x=g;
return;
}
signed main(){
scanf("%lld",&n);
for(int i=1;i<=n;i++){
scanf("%lld%lld",&m[i],&a[i]);
M*=m[i];
}
for(int i=1;i<=n;i++){
k[i]=M/m[i];
exgcd(k[i],m[i],x,y);
c[i]=(x%m[i]+m[i])%m[i];//注意这里要变为最小正整数解
ans=(ans+(a[i]*k[i]%M*c[i]%M))%M;
}
printf("%lld",ans);
}
T5:
经典trick,一眼秒,直接看前缀和在取模意义下相等的个数求解即可
T6:
线性同余方程
T7:
一眼秒
T8:
我们考虑当M已知时两个野人住一个洞满足存在一组野人住在同一个洞的时间在两个野人寿命之内,我们根据这个列出同余方程即可
T9:
发现一个数被取的次数为
这道题坑在哪里,你会发现一个数有逆元,当且仅当
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· NetPad:一个.NET开源、跨平台的C#编辑器
· PowerShell开发游戏 · 打蜜蜂
· 凌晨三点救火实录:Java内存泄漏的七个神坑,你至少踩过三个!