质数求解
欧拉(乌拉(雾)):
拓展一下就是:
费🐎小定理(那就是)
是质数
=>
威尔逊定理
是p为质数的条件,不考
中国剩余定理()
真的看不懂=_=|||
上代码吧:
typedef long long ll; ll ksm(ll a,ll b,ll p) { //省略,去这里:
} ll inv(ll a,ll b) { return ksm(a,b-2,b); } ll crt(int n,ll *a,ll *m) { ll M=1,ret=0; for(int i=1;i<=n;i++) M*=m[i];//将所有数求出来 for(int i=1;i<=n;i++) { ll w=M/m[i];//求每个Sn ret=(ret+w*inv(w,m[i])*a[i])%M; } return (ret+M)%M; } }
质数筛
质数的倍数就质数
所以可以直接筛所有的质数倍数,剩下的一定是质数
当循环到当前数的因子的时候,可以跳出循环了,因为这之后的分解已经包括了当前的因子
int p[N],tot; bool vis[N]; void gen(int n) { for(int i=2;i<=n;i++) { if(!vis[i]) p[++tot]=i; for(int j=1;j<=tot&&i*p[j]<=n;j++) { vis[i*p[j]]=1; if(i%p[j]==0) break; } } }
积性函数
和互质,且,则该函数为积性函数
带入线性筛:
int p[N],tot; bool vis[N]; void gen(int n) { for(int i=2;i<=n;i++) { if(!vis[i]) { p[++tot]=i; phi[i]=i-1; } for(int j=1;j<=tot&&i*p[j]<=n;j++) { vis[i*p[j]]=1; if(i%p[j]!=0) phi[i*p[j]]=phi[i]*phi[p[j]];//积性函数 if(i%p[j]==0) phi[i*p[j]]=phi[i]*p[j];//欧拉函数 break; } } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· DeepSeek在M芯片Mac上本地化部署