欧拉心算

推式子

∑i=1n∑j=1nϕ(gcd(i,j))=∑d=1nϕ(d)∑i=1nd∑j=1nd[gcd(i,j)==1]=∑d=1nϕ(d)∑k=1ndμ(k)(⌊nkd⌋)2另t=kd=∑t=1n(⌊nt⌋)2∑d∣tϕ(d)μ(td)另f(n)=∑d∣nϕ(d)μ(nd)我们考虑如何得到这个函数的前缀和,显然这是一个积性函数有如下性质f(1)=1f(p)=ϕ(1)μ(p)+ϕ(p)μ(1)=−1+p−1=p−2否则我们设n=pkt,p,t互质f(n)=f(pk)f(t)=(∑d∣pkμ(d)ϕ(pkd))f(t)=(∑i=0kμ(pk)ϕ(pk−i))f(t)=(μ(1)ϕ(pk)+μ(p)ϕ(pk−1))f(t)=(pk−2(p2−2p+1))f(t)由此我们得到了一个线性筛法,接下来数论分块即可。\sum_{i = 1} ^{n} \sum_{j = 1} ^{n} \phi(gcd(i, j))\\ = \sum_{d = 1} ^{n} \phi(d) \sum_{i = 1} ^{\frac{n}{d}} \sum_{j = 1} ^{\frac{n}{d}} [gcd(i, j) == 1]\\ = \sum_{d = 1} ^{n} \phi(d) \sum_{k = 1} ^{\frac{n}{d}} \mu(k) (\lfloor \frac{n}{kd}\rfloor) ^2\\ 另t = kd\\ = \sum_{t = 1} ^{n} (\lfloor \frac{n}{t} \rfloor) ^ 2 \sum_{d \mid t} \phi(d) \mu(\frac{t}{d})\\ 另f(n) = \sum_{d \mid n} \phi(d) \mu(\frac{n}{d})\\ 我们考虑如何得到这个函数的前缀和,显然这是一个积性函数有如下性质\\ f(1) = 1\\ f(p) = \phi(1) \mu(p) + \phi(p) \mu(1) = -1 + p - 1 = p - 2\\ 否则我们设n = p ^ k t,p, t互质\\ f(n) = f(p ^ k) f(t) = (\sum_{d \mid p ^ k} \mu(d) \phi(\frac{p ^ k}{d}))f(t)\\ = (\sum_{i = 0} ^{k} \mu(p ^ k) \phi(p ^{k - i}))f(t)\\ = (\mu(1) \phi(p ^ k) + \mu(p) \phi(p ^{k - 1}))f(t)\\ = (p ^{k - 2} (p ^ 2 - 2p + 1))f(t)\\ 由此我们得到了一个线性筛法,接下来数论分块即可。 i=1∑n​j=1∑n​ϕ(gcd(i,j))=d=1∑n​ϕ(d)i=1∑dn​​j=1∑dn​​[gcd(i,j)==1]=d=1∑n​ϕ(d)k=1∑dn​​μ(k)(⌊kdn​⌋)2另t=kd=t=1∑n​(⌊tn​⌋)2d∣t∑​ϕ(d)μ(dt​)另f(n)=d∣n∑​ϕ(d)μ(dn​)我们考虑如何得到这个函数的前缀和,显然这是一个积性函数有如下性质f(1)=1f(p)=ϕ(1)μ(p)+ϕ(p)μ(1)=−1+p−1=p−2否则我们设n=pkt,p,t互质f(n)=f(pk)f(t)=(d∣pk∑​μ(d)ϕ(dpk​))f(t)=(i=0∑k​μ(pk)ϕ(pk−i))f(t)=(μ(1)ϕ(pk)+μ(p)ϕ(pk−1))f(t)=(pk−2(p2−2p+1))f(t)由此我们得到了一个线性筛法,接下来数论分块即可。

代码

bzoj挂了,所以没地方测试,所以只能在网上找了题解对拍了几组样例。

/*Author : lifehappy
*/
#pragma GCC optimize(2)
#pragma GCC optimize(3)
#include <bits/stdc++.h>using namespace std;typedef long long ll;const int inf = 0x3f3f3f3f;const int N = 1e7 + 10;bool st[N];ll f[N], prime[N], cnt;ll quick_pow(ll a, int n) {ll ans = 1;while(n) {if(n & 1) ans = ans * a;a = a * a;n >>= 1;}return ans;
}void init() {st[1] = f[1] = 1;for(int i = 2; i < N; i++) {if(!st[i]) {prime[cnt++] = i;f[i] = i - 2;}for(int j = 0; j < cnt && i * prime[j] < N; j++) {st[i * prime[j]] = 1;if(i % prime[j] == 0) {int num = 1, temp = i;while(temp % prime[j] == 0) {temp /= prime[j], num++;}f[i * prime[j]] = 1ll * quick_pow(prime[j], num - 2) * (1ll * prime[j] * prime[j] - 2ll * prime[j] + 1) * f[temp];break;}f[i * prime[j]] = f[i] * f[prime[j]];}}for(int i = 1; i < N; i++) {f[i] += f[i - 1];}
}int main() {// freopen("in.txt", "r", stdin);// freopen("out.txt", "w", stdout);// ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);init();int T;scanf("%d", &T);while(T--) {ll n, ans = 0;scanf("%lld", &n);for(ll l = 1, r; l <= n; l = r + 1) {r = n / (n / l);ans += (n / l) * (n / l) * (f[r] - f[l - 1]);}printf("%lld\n", ans);}return 0;
}

欧拉心算(反演 + 积性函数筛)相关推荐

  1. P6222 「P6156 简单题」(反演 + 积性函数线性筛)

    P6156 简单题 推式子 ∑i=1n∑j=1n(i+j)kf(gcd(i,j))gcd(i,j)=∑i=1n∑j=1n(i+j)kμ2(gcd(i,j))gcd(i,j)=∑d=1nμ2(d)dk+ ...

  2. HDU 6134 2017 多校训练:Battlestation Operational(莫比乌斯反演+积性函数)

    实在太长了直接放题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=6134 这题就是求 考虑当Gcd(i, j)==1时,除了j为1的情况,其它时候i/j一 ...

  3. 2019南昌网络赛G. tsy‘s number(反演 + 积性函数O(n)预处理)

    tsy's number 推式子 ∑i=1n∑j=1n∑k=1nϕ(i)ϕ(j2)ϕ(k3)ϕ(i)ϕ(j)ϕ(k)ϕ(gcd(i,j,k))我们假定j=p1k1p2k2p3p3--pnkn,有ϕ(j ...

  4. 专题·莫比乌斯函数与欧拉函数【including 整除分块,积性函数,狄利克雷卷积,欧拉函数,莫比乌斯函数,莫比乌斯反演

    初见安~又是好久没写博客了--加上CSP才炸了一波. 目录 一.整除分块 题解 二.积性函数 三.狄利克雷卷积 四.欧拉函数 五.莫比乌斯函数(mu) 六.莫比乌斯反演 一.整除分块 看个例题:洛谷P ...

  5. 牛客 华华给月月出题 (积性函数+欧拉筛+快速幂)

    题目描述 华华刚刚帮月月完成了作业.为了展示自己的学习水平之高超,华华还给月月出了一道类似的题: ⊕符号表示异或和,详见样例解释. 虽然月月写了个程序暴力的算出了答案,但是为了确保自己的答案没有错,希 ...

  6. 杜教筛(上):整除分块,积性函数,欧拉与莫比乌斯

    整除分块: 当我们求∑i=1nf(⌊ni⌋)\sum_{i=1}^nf(\lfloor\frac{n}{i}\rfloor)∑i=1n​f(⌊in​⌋)的时候,如果1到n求一遍感觉太傻了,因为会有很多 ...

  7. 51nod1040 最大公约数之和,欧拉函数或积性函数

    1040 最大公约数之和 给出一个n,求1-n这n个数,同n的最大公约数的和.比如:n = 6时,1,2,3,4,5,6 同6的最大公约数分别为1,2,3,2,1,6,加在一起 = 15 看起来很简单 ...

  8. CCPC-2017 杭州站B丨HDU - 6265丨数论丨积性函数 丨欧拉函数丨狄利克雷卷积丨思维变换

    [参考博客]@WJHKDGHP ccpc2017杭州站 B [参考博客]@灬从此以后灬 2017 CCPC 杭州 HDU6265B 积性函数 特别感谢以上两位博主,让我看懂了许多细节. 交题网址(HD ...

  9. 积性函数欧拉函数莫比乌斯函数

    积性函数 (积性函数). 如果算术函数fff对任意两个互素的正整数a和b,f(ab)=f(a)f(b)f(ab)=f(a)f(b)f(ab)=f(a)f(b),则fff被称为积性函数(或乘性函数):如 ...

最新文章

  1. 关于大型网站技术演进的思考(七)--存储的瓶颈(7)
  2. Asp.net中的Cache--HttpRuntim.Cache 和 HttpContext.Current.Cache
  3. windows7使用vhd虚拟磁盘
  4. Java轻量级业务层框架Spring两大核心IOC和AOP原理
  5. Java开发快速上手
  6. 固高运动控制卡QT和VS(MFC)的配置
  7. django for 前端_Django 前端Wbe框架
  8. 跑分软件测试原理,SSD跑分的那些事儿,分享一下,测试软件跑分应该怎么看
  9. uni-app 蓝牙通信
  10. 邮箱登录入口,163邮箱个人登录入口,163邮箱注册登录
  11. AJAX框架简笔画风景简单,海南风景简笔画超简单
  12. java怎么判断field类型_java技巧:反射判断field类型方法
  13. 2015年校园招聘12家IT公司面试体验
  14. panda强化练习2
  15. Java后端返回前端的日期差9小时?
  16. 字符自编车牌号c语言,自编车牌号技巧,自编车牌号码大全
  17. CC BY-SA 4.0 是什么?
  18. 纳维斯托克方程_托克如何检验其网络安全性
  19. 关闭笔记本电脑触控板的方法
  20. 【漏洞修复】 CVE Linux 系统应用漏洞修复笔记

热门文章

  1. 豆瓣评分9分+,每一部看完不禁感慨!这里是神州大地!
  2. 女友的前男友教我该怎么照顾她......
  3. 谁还没个黑历史了。。。 | 今日最佳
  4. 《Pyflink》Flink集群安装,Python+Flink调研
  5. 通过简单的Word Count讲解MapReduce原理以及Java实现
  6. 获取 子文件夹 后缀_CSDN学院第一个Ptython Homework-- 递归统计文件夹大小
  7. position定位 响应式_使用 Vue3 实现双盒子定位 Overlay
  8. yaml for java_细数Java项目中用过的配置文件(YAML篇)
  9. 汉字为什么能流传至今_汉字能流传至今,比毛不易还不易,它的同龄字统统都死掉了...
  10. linux安装rz命令_Linux 安装dep安装包命令