Portal -->loj6179

Solution

​   这题其实有一个式子一喵一样的版本在bzoj,但是那题是\(m\)特别大然后只有一组数据

   这题多组数据==

​  

   首先根据\(\varphi(x)\)的通项\(\varphi(x)=x\prod\limits_{i=1}^{n}(1-\frac{1}{p1_i})=\prod\limits_{i=1}^{m}(p_i-1)p_i^{a_i-1}\)(其中\(n\)是\(x\)分解质因数之后没有去重的质因数列表\(p1\)的长度,\(m\)是去重之后质因数列表\(p\)的长度,\(x=\prod\limits_{i=1}^{m} p_i^{a_i}\))我们有\(\varphi(i*j)=\varphi(i)*\varphi(j)*\frac{gcd(i,j)}{\varphi(gcd(i,j))}\),具体就是因为\(\varphi(i)*\varphi(j)\)中\(gcd\)的质因子的部分被算了两次,但是除掉\(\varphi(gcd(i,j))\)之后又没有将\(gcd\)对\(a_i\)的贡献算上

​   然后我们就可以快乐推式子了,为了让接下来的式子更加简洁,我们默认\(n<=m\):
\[ \begin{aligned} &\sum\limits_{i=1}^{n}\sum\limits_{j=1}^{m}\varphi(ij)\\ =&\sum\limits_{i=1}^n \sum\limits_{j=1}^m \varphi(i)\varphi(j)\frac{gcd(i,j)}{\varphi(gcd(i,j))}\\ =&\sum\limits_{d=1}^n\sum\limits_{i=1}^n\sum\limits_{j=1}^m\varphi(i)\varphi(j)\frac{d}{\varphi(d)}[gcd(i,j)=d]\\ =&\sum\limits_{d=1}^n\sum\limits_{i=1}^{\lfloor\frac{n}{d}\rfloor}\sum\limits_{j=1}^{\lfloor\frac{m}{d}\rfloor}\varphi(id)\varphi(jd)\frac{d}{\varphi(d)}[gcd(i,j)=1]\\ =&\sum\limits_{d=1}^n\sum\limits_{i=1}^{\lfloor\frac{n}{d}\rfloor}\sum\limits_{j=1}^{\lfloor\frac{m}{d}\rfloor}\varphi(id)\varphi(jd)\frac{d}{\varphi(d)}\sum\limits_{k|i,k|j}\mu(k)\\ =&\sum\limits_{d=1}^n\frac{d}{\varphi(d)}\sum\limits_{k=1}^{\lfloor\frac{n}{d}\rfloor}\mu(k)\sum\limits_{i=1}^{\lfloor\frac{n}{dk}\rfloor}\varphi(idk)\sum\limits_{j=1}^{\lfloor\frac{m}{dk}\rfloor}\varphi(jdk)\\ =&\sum\limits_{T=1}^n\sum\limits_{k|T}\mu(\frac{T}{k})\frac{k}{\varphi(k)}\sum\limits_{i=1}^{\lfloor\frac{n}{T}\rfloor}\varphi(iT)\sum\limits_{j=1}^{\lfloor\frac{m}{T}\rfloor}\varphi(jT)\\ \end{aligned} \]
​   稍微说一下最后一步是相当于枚举\(dk\),也就是令\(T=dk\)然后枚举\(T\)

​   然后我们可以令\(g(x)=\sum\limits_{k|x}\mu(\frac{x}{k})\frac{k}{\varphi(k)}\),令\(s(i,j)=\sum\limits_{k=1}^j\varphi(ik)\)

   那么这个式子就可以写成:
\[ \sum\limits_{i=1}^{n}\sum\limits_{j=1}^{m}\varphi(ij)=\sum\limits_{i=1}^ng(i)\cdot s(i,\lfloor\frac{n}{i}\rfloor)\cdot s(i,\lfloor\frac{m}{i}\rfloor) \]

   
​   接下来看起来是怎么化也化不动了qwq但是我们发现\(g(i)\)和\(s(i,j)\)都可以在调和级数的复杂度内预处理出来,但是再接下来我们发现\(O(n)\)求解显然是不现实的

​   这时候当然是要大力分段啊,只不过光是普通的操作还是不行(前缀和这个东西很难搞),这里我们还需要一个黑科技,我们手动设定一个阈值\(TOP\),然后对于\(i<=\frac{m}{TOP}\)的情况我们暴力算,对于\(i>\frac{m}{TOP}\)的情况,我们再预处理一个\(T[i][j][k]\)(也就是前缀和):
\[ \begin{aligned} T[i][j][k]&=\sum\limits_{p=1}^kg(p)\sum\limits_{t=1}^i\varphi(tp)\sum\limits_{t=1}^i\varphi(tp)\\ &=\sum\limits_{p=1}^kg(p)\cdot s(p,i)\cdot s(p,j) \end{aligned} \]
​   然后当\(i>\frac{m}{TOP}\)的时候\(\lfloor\frac{m}{i}\rfloor<=TOP\),所以我们\(i,j\)只要预处理到\(TOP\)然后直接用普通的分段操作来搞就好了

  

   代码大概长这个样子

#include<iostream>
#include<cstdio>
#include<cstring>
#include<vector>
using namespace std;
const int N=1e5+10,MOD=998244353,TOP=35,inf=2147483647;
int p[N],g[N],miu[N],phi[N],inv[N];
vector<int>S[N];//s[i][j]=\sum_{k=1}^{j}phi[i*k]
vector<int> T[TOP+1][TOP+1];//T[i][j][k]=\sum_{p=1}^{k}\sum_{t=1}^{i}phi(t*p)\sum_{t=1}^{j}phi(t*p)
int vis[N];
int n,m,ans,T1;
void prework(int n){int cnt=0;miu[1]=1; phi[1]=1;for (int i=2;i<=n;++i){if (!vis[i])miu[i]=-1,p[++cnt]=i,phi[i]=i-1;for (int j=1;j<=cnt&&i*p[j]<=n;++j){vis[i*p[j]]=true;if (i%p[j]==0){miu[i*p[j]]=0; phi[i*p[j]]=phi[i]*p[j];break;}elsemiu[i*p[j]]=-miu[i],phi[i*p[j]]=phi[i]*phi[p[j]];}}inv[1]=1;for (int i=2;i<=n;++i) inv[i]=1LL*(MOD-MOD/i)*inv[MOD%i]%MOD;for (int i=1;i<=n;++i)for (int j=i;j<=n;j+=i){if (j==9)int debug=1;g[j]=(1LL*g[j]+1LL*miu[j/i]*(1LL*(i)*inv[phi[i]]%MOD)+MOD)%MOD;}for (int i=1;i<=n;++i){S[i].push_back(0);for (int j=1;j<=n/i;++j) S[i].push_back((S[i][j-1]+phi[i*j])%MOD);}for (int i=1;i<=TOP;++i)for (int j=1;j<=TOP;++j){T[i][j].push_back(0);for (int k=1;k<=n/i&&k<=n/j;++k)T[i][j].push_back((1LL*T[i][j][k-1]+1LL*g[k]*S[k][i]%MOD*S[k][j]%MOD)%MOD);}}
void solve(){if (n>m) swap(n,m);ans=0;for (int i=1;i<=m/TOP;++i)ans=(1LL*ans+1LL*g[i]*S[i][n/i]%MOD*S[i][m/i]%MOD)%MOD;for (int i=m/TOP+1,pos=0;i<=n;i=pos+1){pos=min(m/(m/i),(n/i)?n/(n/i):inf);ans=(1LL*ans+(1LL*T[n/i][m/i][pos]+MOD-T[n/i][m/i][i-1])%MOD)%MOD;}printf("%lld\n",ans);
}int main(){
#ifndef ONLINE_JUDGEfreopen("a.in","r",stdin);
#endifprework(N-10);//prework(10);scanf("%d",&T1);for (int o=1;o<=T1;++o){scanf("%d%d",&n,&m);solve();}
}

转载于:https://www.cnblogs.com/yoyoball/p/9418115.html

【loj6179】Pyh的求和相关推荐

  1. [LOJ6179]Pyh的求和

    首先有一个等式是$\varphi(ab)=\frac{\varphi(a)\varphi(b)d}{\varphi(d)}$,其中$d=(a,b)$,这个比较好证,直接按展开式计算可得$\varphi ...

  2. 手机浏览器被黑_我的手机被黑了,这就是保护自己的方法

    手机浏览器被黑 免责声明 (Disclaimer) Some of my friends were saying, my mobile phone didn't hack and I am doing ...

  3. LeetCode简单题之逐步求和得到正数的最小值

    题目 给你一个整数数组 nums .你可以选定任意的 正数 startValue 作为初始值. 你需要从左到右遍历 nums 数组,并将 startValue 依次累加上 nums 数组中的值. 请你 ...

  4. loj2058 「TJOI / HEOI2016」求和 NTT

    loj2058 「TJOI / HEOI2016」求和 NTT 链接 loj 思路 \[S(i,j)=\frac{1}{j!}\sum\limits_{k=0}^{j}(-1)^{k}C_{j}^{k ...

  5. PyTorch 安装和基本运算— Tensor 的数据类型(浮点型、整型、随机浮点型等)、基本运算(绝对值、求和、裁剪、求商、求积、求幂等)、Tensor 与 Numpy 转换

    PyTorch 的安装可以到官网 https://pytorch.org/,选择适合自己机器以及安装方式,执行对应的命令即可. 除了安装 PyTorch 之外,建议也安装 torchvision 包. ...

  6. L1-009. N个数求和

    L1-009. N个数求和 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 本题的要求很简单,就是求N个数字的和.麻烦的是,这些 ...

  7. shell脚本求和_【零基础学云计算】Shell编程之case语句与循环语句

    case多分支语句 循环语句 for循环语句 while循环语句 untli循环语句 Shell函数 Shell数组 case语句的结构 针对变量的不同取值,分别执行不同的命令序列 case 变量值 ...

  8. Java8 Stream应用:Map合并、过滤、遍历、values int求和等

    1. Java多个Map合并 // 多个Map<Long,Integer>, 根据key相同的,value累积求和: public static Map mapCombine(List&l ...

  9. 【TensorFlow2.0】(6) 数据统计,范数、最值、求和、均值、最值位置、唯一值、张量比较

    各位同学好,今天和大家分享一下TensorFlow2.0中的数据分析操作.内容有: (1)范数 tf.norm():(2)最值 tf.reduce_min(), tf.reduce_max()(3)求 ...

最新文章

  1. Laravel7使用Auth进行用户认证
  2. 2021-01-07 matlab数值分析 常微分方程初边值问题数值解 标准龙格库塔四阶四段公式 欧拉法
  3. druid 多数据源_Spring Boot + Mybatis 中 配置Druid多数据源并实现自由切换
  4. react connect
  5. tcp协议的主要功能是什么_前端要知道的网络知识一:TCP/IP 协议到底在讲什么...
  6. 微服务落地,我们在考虑什么?| 技术头条
  7. docker 启动成功但无法访问_docker nginx 运行后无法访问的问题解决
  8. arch开机自动认证
  9. 重构Webpack系列之三 ----出口(output)
  10. android系统能内存,安卓手机到底有多能吃RAM内存?
  11. Android P Keyguard Scrim快速灭屏亮屏闪亮
  12. 异构网络互联;路由与转发;SDN基本概念;拥塞控制
  13. 王者荣耀的技术修炼之路
  14. CSS的浮动属性,详细学习指南
  15. 前端开发工程师css样式进阶指南
  16. Python采集二手房源数据信息 基础版, 多线程版
  17. 嵌入式系统(五):RISC-V4
  18. CPU-Z、GPU-Z:查看电脑的CPU处理器、GPU显卡信息
  19. 国内有哪些VPS值得推荐?
  20. 图像显著性检测和图像检索的标准图像库整理

热门文章

  1. python argsort(0)_【Python】numpy中argsort函数的使用
  2. 名人经典语录(史玉柱)
  3. 【调剂】中国地质大学(北京)地球物理与信息技术学院2023年硕士研究生预调剂公告...
  4. 移动开发的消亡史:出路在哪?
  5. 公司企业展示门户店铺展示宣传微信小程序前端源码
  6. 第二课 基础篇_SQL语法
  7. 开发了一个微信小程序项目
  8. 文献阅读(40)—— 深度学习对病理性近视进行分类的同时进行病灶分割
  9. 同时安装了天正8.0和AUTO CAD2007为什么双击天正每次打开的都是AUTO CAD2007?
  10. win10的剪贴板在哪里?