下图给出杜教筛详细推导过程,前置知识有积性函数和莫比乌斯反演。

杜教筛是一种优秀的求积性函数前缀和算法,其时间复杂度受预处理数组的影响,一般开到2/3次幂大小,可使复杂度达到较为优秀的程度。

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

【模板】杜教筛(Sum) - 洛谷

# 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;}

杜教筛【莫比乌斯前缀和,欧拉函数前缀和】推导与模板【一千五百字】相关推荐

  1. 杜教筛 (包括线筛) 莫比乌斯函数前缀和 欧拉函数前缀和 因数和函数前缀和 因子个数前缀和 ( 分析 )...

    对于莫比乌斯函数 和 欧拉函数  小于 1e8差不多都可线筛    1e12以内  杜教筛 代码针对洛古  p4213  n<=(1<<31)-1  杜教筛 #include< ...

  2. P3768 简单的数学题 [狄利克雷卷积,杜教筛,莫比乌斯反演]

    简单的数学题 题目连接 https://www.luogu.org/problemnew/show/P3768 题目描述 输入一个正整数n,n≤1010n,n\le 10^{10}n,n≤1010和p ...

  3. 欧拉函数phi值的计算模板

    求小于n且与n互质的整数的个数.告诉你n的唯一分解式 我们可以运用容斥原理,先分别减去是p1,p2,p3..pn的倍数,再加上同时是他们素因子的个数,再减去3个--以此类推即可. 我们可以化简一下公式 ...

  4. 牛客练习赛81 E. 小 Q 与函数求和 1( “简单莫比乌斯反演” ,欧拉函数性质)

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 牛客练习赛81 E. 小 Q 与函数求和 1( "简单莫比乌斯反演" ) Prob ...

  5. Loj #572. 「LibreOJ Round #11」Misaka Network 与求和(莫比乌斯反演 + 杜教筛 + min_25筛(递推版))

    直接反演一下:∑i=1n∑i=1nf(gcd(i,j))k\sum_{i = 1}^n\sum_{i = 1}^nf(gcd(i,j))^ki=1∑n​i=1∑n​f(gcd(i,j))k=∑d=1n ...

  6. 杜教筛及其时间复杂度分析

    文章目录 杜教筛 方法 举例 莫比乌斯函数 欧拉函数 时间复杂度 杜教筛 杜教筛用于求一类积性函数的前缀和,时间复杂度可以做到 O(n23)O(n^{\frac{2}{3}})O(n32​). 方法 ...

  7. [51NOD1847]奇怪的数学题(杜教筛+min_25筛+第二类斯特林数)

    f(x)f(x)f(x)表示xxx的次大约数,有f(x)=xx的最小质因数f(x)=\frac{x}{x的最小质因数}f(x)=x的最小质因数x​,那么 ∑i=1n∑j=1nsgcd(i,j)k=∑i ...

  8. bzoj 3944: Sum 杜教筛

    本来以为这种东西只能O(N)线性筛,但是大千世界,无(sang)奇(xin)不(bing)有(kuang),确实存在更快的算法. 省选的时候rzz讲这种东西在国内OI称为杜教筛,用来求数论函数的前缀和 ...

  9. [LOJ]#572. 「LibreOJ Round #11」Misaka Network 与求和 min_25筛+杜教筛

    Solution 推一下式子,容易得到一个线性做法:∑d=1nfk(d)((2∑i=1⌊ni⌋φ(i))−1)\sum_{d=1}^nf^k(d)((2\sum_{i=1}^{\lfloor{n\ov ...

最新文章

  1. [Java基础]Collections概述和使用
  2. wireshark抓包工具的使用及分析
  3. 从蜜罐新技术看欺骗防御发展走向
  4. [crypto][ipsec] 简述ESP协议的sequence number机制
  5. impdb导入oracle,impdp导入.dmp到oracle
  6. www,android18x.com,Android 11 LineageOS 18.1系统
  7. SpringMvc-HandlerExceptionResolver
  8. Bailian4121 股票买卖【最值】
  9. 微信公号“架构师之路”学习笔记(三)-MQ消息可达性_幂等性_延时性架构设计(应用场景、可靠投递、流量冲击)
  10. 安全狗云备份爆笑段子~~~如果上天再给我一次机会
  11. 计算机虚拟技术有那么难吗,价值在哪里?
  12. php 做圆形头像,php制作圆形用户头像方法
  13. RGB转YCbCr422_BT709颜色空间转换仿真
  14. 启发式算法(heuristic algorithm)中的启发式(heuristic)到底是什么意思?
  15. android7工程自测模式,工程模式测试
  16. 供应链金融(Supply Chain Finance)
  17. PyCharm2017破解教程
  18. 关于前端后台管理系统总结
  19. 大数据破获网售假耐克案
  20. 华为鸿蒙P10plus,华为P10 Plus全面评测 华为P10 Plus值不值得买

热门文章

  1. 职场上,你是老虎、孔雀、考拉,还是猫头鹰?
  2. 苹果6访问限制密码4位_苹果的Safari浏览器将比谷歌的Chrome浏览器更加安全
  3. 设计模式---享元模式
  4. vim 设置多行缩进多个空格
  5. 01-Echarts折线图基本实现、最大值、最小值、堆叠折线图等等
  6. MySQL CAST 函数与 CONVERT 函数
  7. unity游戏返回游戏黑屏
  8. Unity 实现简单的发射子弹功能
  9. 使用renren-ui------01
  10. 簇集素蛋白药物有望治疗老年痴呆症