先要推式子
\[ \begin{aligned} \varphi(x)\varphi(y)&=(x\prod_{p|x}\frac{p-1}p)(y\prod_{p|y}\frac{p-1}p)\\ &=(\prod_{p|xy}\frac{p-1}p)(\prod_{p|\gcd(x,y)}\frac{p-1}p)xy\\ &=\varphi(xy)\varphi(\gcd(x,y))xy \end{aligned} \\\Rightarrow \varphi(xy)=\frac{\varphi(x)\varphi(y)\gcd(x,y)}{\varphi(\gcd(x,y))}\\ \]
接着堆式子
\[ \begin{aligned} ans&=\sum_i\sum_{i}\varphi(a_ia_j)dis(i,j)\\ &=\sum_{d=1}^n\frac{d}{\varphi(d)}\sum_i\sum_j\varphi(a_i)\varphi(a_j)dis(i,j)[\gcd(a_i,a_j)=d] \\ f(d)&=\sum_i\sum_j...[\gcd(a_i,a_j)=d] \\ g(d)&=\sum_{d|x}f(x)\\ &=\sum_i\sum_j...[d|\gcd(a_i,a_j)]\\ &=\sum_{d|a_i}\sum_{d|a_j}\varphi(a_i)\varphi(a_j)(dep_i+dep_j-2dep_{lca(i,j)})\\ &=\sum_{d|a_i}\varphi(a_i)\sum_{d|a_j}\varphi(a_j)(dep_i+dep_j-2dep_{lca(i,j)})\\ &=2\sum_{d|a_i}\varphi(a_i)dep_i\sum_{d|a_j}\varphi(a_j)-2\sum_{d|a_i}\varphi(a_i)\sum_{d|a_j}\varphi(a_j)*dep_{lca(i,j)} \\ f(d)&=\sum_{d|x}\mu(\frac{x}d)g(x)=\sum_{i=1}^{\lfloor\frac{n}d\rfloor}\mu(i)g(di) \\ ans&=\sum_{d=1}^n\frac{d}{\varphi(d)}f(d)\\ &=\sum_{d=1}^n\frac{d}{\varphi(d)}\sum_{i=1}^{\lfloor\frac{n}d\rfloor}\mu(i)g(di)\\ &=\sum_{T=1}^ng(T)\sum_{d|T}\mu(\frac{T}d)\frac{d}{\varphi(d)} \\ h(T)&=\sum_{d|T}\mu(\frac{T}d)\frac{d}{\varphi(d)} \\ \end{aligned} \]
留意到\(h(T)\)可以直接筛。而\(g(T)\)也是可以“筛”的(建立虚树,自底向上的带权根径覆盖),然后把这俩玩意儿数乘……

简直绝了,复杂度是\(O(b\log n)\)级别的

代码留坑……

转载于:https://www.cnblogs.com/nosta/p/11033914.html

[CF809E] Surprise me!相关推荐

  1. 小白也能看懂:一文学会入门推荐算法库 surprise

    来源 | 机器学习与推荐系统 surprise 支持的每个算法本身思路并不复杂,代码也不晦涩难懂,我们主要的目的是理解它的架构,学习框架各个部分的交互. 这篇文章是想从一个整体的视角,以作者最初的思路 ...

  2. 早上醒来收获一个Surprise,成为CSDN博客专家了

    目录 起步 今天一早醒来打开手机,像往常一样,看一下CSDN app,突然有点小惊喜,因为头像上多了博客专家的图标了.我觉得CSDN这个操作(早上公布通过审核的消息)应该得到点赞的,因为可以让你早上醒 ...

  3. 自动化测试框架:没有Surprise的原因

    今日将框架完整走通,给测试试用.但从测试表情看,显然没有Surprise的意思,反而有种因为改变使用习惯并要学习新框架的厌烦. 尽管事前,我们已经对需求做过自认为相当全面的分析,而且在框架设计上也充分 ...

  4. 好身材大姐姐学计算机惊喜用英语,英语作文:一个大大的惊喜A Big Surprise

    英语作文:一个大大的惊喜A Big Surprise 在日常学习.工作或生活中,大家一定都接触过作文吧,作文一定要做到主题集中,围绕同一主题作深入阐述,切忌东拉西扯,主题涣散甚至无主题.那么,怎么去写 ...

  5. 《推荐系统笔记(六)》svd在推荐系统中的应用推广(FunkSVD,BiasSVD以及SVD++)及简单实战(surprise库)

    前言 奇异值分解(SVD)可以将任意矩阵分解成两个方阵和一个对角矩阵的乘积.借助于SVD,我们可以将推荐系统中的用户-评分矩阵进行分解,通过推广的SVD方法(FunkSVD,BiasSVD和SVD++ ...

  6. 3分钟学会python_3分钟学会使用Python推荐系统库Surprise

    最近做推荐系统,研究了一下Surprise库,使用简单,效果不错. Github地址:NicolasHug/Surprise 实现功能: 找到和用户A相似的N个用户 找到和项目A相似的N个项目 1.i ...

  7. ImportError: cannot import name ‘evaluate‘ from ‘surprise‘解决方案

    报错: 用svd算法做推荐系统时候导入evaluate库的时候总是遇到这个报错Cannot find reference 'evaluate' in 'init.py | init.py' 原因 根据 ...

  8. 基于Python库surprise的电影推荐系统

    surprise 是一个主流的python推荐系统框架,支持的最基本数据格式为movielens dataset,其评分数据格式为 user item rating timestamp # -*- c ...

  9. Meet Surprise品牌饰品告诉你不同季节佩戴首饰有什么讲究

    年复一年,节气时令不停转换:天地万物,以不同的面目对应不同的时令.这世界,真的神奇.那绿草如茵的春.青枝掩映的夏.红叶飘飘的秋.白雪飞扬的冬,为什么总是应时而来从不耽搁?我生于天地之间,在这天地之间穿 ...

  10. 推荐系统:ImportError: cannot import name ‘evaluate‘ from ‘surprise

    根据官方文档,evaluate()方法在1.0.5版中已弃用(功能上已由model_selection.cross_validate()取代),并在1.1.0版中删除 分析: 需要改两个地方 第一个是 ...

最新文章

  1. Codeforces 458A Golden System
  2. 如何同时启动多个Tomcat服务器
  3. springboot-web开发(请求参数)
  4. 3d数学基础学习总结
  5. 最优传输理论和生成模型的几何观点
  6. 一个程序员年近四十岁的一些胡思乱想
  7. iframe嵌套的html高度,iframe 多层嵌套 无限嵌套 高度自适应的解决方案
  8. autoreconnect mysql true_连接数据库超时设置autoReconnect=true
  9. 一流设计师导航|16map,一款强大且智能的设计师导航网站
  10. 迅捷cad_迅捷协议
  11. shell 命令 netstat 查看端口占用
  12. Struts2中的异常处理
  13. php查询mysql语句_PHP之路——MySql查询语句
  14. 高一计算机基础知识ppt课件,高一信息技术课件
  15. 玩游戏显示服务器不稳定,FPS不稳定是什么原因?玩游戏FPS低怎么办?
  16. 记一次JPA项目启动速度优化
  17. 推荐一份完整的大数据教学视频
  18. python制作小提琴图
  19. html5如何快速选择工具,PS抠图教程!教你PHOTOSHOP中5个快速选择工具
  20. 用计算机pol计算方位角,如何通过编程代替计算器内部函数“Pol和Rec”

热门文章

  1. velocity模板使用建议
  2. [Linux] 常用Linux命令
  3. Python—redis
  4. 关于口令强度等级的设计
  5. 英语句型之综合运用篇
  6. 百倍训练效率提升,微软通用语言表示模型T-ULRv5登顶XTREME
  7. 多标签文本分类研究进展
  8. 【论文解读】“推荐系统”加上“图神经网络”
  9. 简单实例讲解为何深度学习有效
  10. 抖音算法暑期实习春招双双发车