当前位置:网站首页>杜教筛【莫比乌斯前缀和,欧拉函数前缀和】推导与模板【一千五百字】
杜教筛【莫比乌斯前缀和,欧拉函数前缀和】推导与模板【一千五百字】
2022-07-30 02:30:00 【秦小咩】
下图给出杜教筛详细推导过程,前置知识有积性函数和莫比乌斯反演。
杜教筛是一种优秀的求积性函数前缀和算法,其时间复杂度受预处理数组的影响,一般开到2/3次幂大小,可使复杂度达到较为优秀的程度。




杜教筛的时间复杂度还要取决于预处理数组的大小,将预处理前缀和数组处理到n^(2/3)大小会使杜教筛时间复杂度缩短至 O(n^(2/3)) ,否则会超时

# include<iostream>
# include<map>
# include<unordered_map>
# include<math.h>
using namespace std;
typedef long long int ll;
unordered_map<int,int>m;
const int N=1664503;
int tot;
int prime[N+10];
ll mu[N+10];
bool not_prime[N+10];
ll phi[N+10];
unordered_map<ll,ll>sum_mu;
unordered_map<ll,ll>sum_phi;
inline void init(int n)
{
mu[1]=1;
phi[1]=1;
for(ll i=2; i<=n; i++)
{
if(!not_prime[i])
{
tot++;
prime[tot]=i;
phi[i]=i-1;
mu[i]=-1;
}
for(ll j=1; j<=tot&&i*prime[j]<=N; j++)
{
not_prime[i*prime[j]]=1;
if(i%prime[j]==0)
{
mu[i*prime[j]]=0;
phi[i*prime[j]]=phi[i]*prime[j];
break;
}
mu[i*prime[j]]=-mu[i];
phi[i*prime[j]]=phi[i]*(prime[j]-1);
}
}
for(int i=1;i<=n;i++)
{
mu[i]+=mu[i-1];
phi[i]+=phi[i-1];
}
}
inline int g_sum(int x)
{
return x;
}
inline int getsum_mu(int x)
{
if(x<=N)
return mu[x];
if(sum_mu[x])
return sum_mu[x];
ll ans=1;
for(ll l=2,r;l<=x;l=r+1)
{
r=x/(x/l);
ans-=(g_sum(r)-g_sum(l-1))*getsum_mu(x/l);
}
return sum_mu[x]=ans/g_sum(1ll);
}
inline ll getsum_phi(ll x)
{
if(x<=N)
return phi[x];
if(sum_phi[x])
return sum_phi[x];
ll ans=(ll)x*(ll)(x+1)/2;
for(ll l=2,r;l<=x;l=r+1)
{
r=x/(x/l);
ans-=(g_sum(r)-g_sum(l-1))*getsum_phi(x/l);
}
return sum_phi[x]=ans/g_sum(1ll);
}
int main ()
{
init(N);
int t;
cin>>t;
while(t--)
{
ll n;
cin>>n;
cout<<getsum_phi(n)<<" "<<getsum_mu(n)<<'\n';
}
return 0;
}
边栏推荐
- Typora transparent background image
- Sublime does background transparency and column editor
- 【MySQL】SQL学习
- 解决:Error while adding the mapper ‘interface to configuration. Error parsing Mapper XML
- JS Bom location 楼层导航效果 offsetTop data-n 方括号选择器
- go bidirectional streaming mode
- uni-app如何配置APP自定义顶部标题栏
- 绘图问题记录
- Dell's first pure soft product redefines next-generation object storage
- JS develops 3D modeling software
猜你喜欢
随机推荐
HCIP 第十五天
matlab用dde23求解带有固定时滞的时滞微分方程
基于蒙特卡诺的风场景模型出力(Matlab代码实现)
新型海上风电机组及压缩空气储能系统的建模与控制(Matlab代码实现)
Type-C边充电边OTG芯片——LDR6028A
音视频开发的正确(学习思路+技术指导)
AI落地难?云原生助力企业快速应用机器学习 MLOps
Fudan-Washington University EMBA Kechuang's Ao E丨The Magical Materials and We Are Shaped
Dell's first pure soft product redefines next-generation object storage
单片机没有随机数发生器如何生成随机数——2022.07.26
Understanding the prototype chain in js, what problem does the prototype chain solve?
黑客动态播报 | 一封假offer,盗取6.25亿美元
多线程---初阶
计算机复试面试题总结
超详细的MySQL三万字总结
有一个设计时钟的题目,进行详细分析(三)
JS Bom window innerWidth clientWidth onresize 窗口滚动偏移量 返回顶部
SwiftUI SQLite Database Storage Tutorial Collection (2022 Edition)
HCIP 第十四天
表达式计算器 ExpressionRunner









