题目戳我

\(\text{Solution:}\)

\[\sum_{i=1}^n \sum_{j=1}^n \rho(i)\rho(j)\rho(\gcd(i,j))
\]
\[=\sum_{d=1}^n \rho(d)\sum_{i=1}^n \sum_{j=1}^n \rho(i)\rho(j)\rho(\gcd(i,j))[\gcd(i,j)=d]
\]
\[=\sum_{d=1}^n \rho(d)\sum_{i=1}^\frac{n}{d}\sum_{j=1}^\frac{n}{d}\rho(i*d)\rho(j*d)[\gcd(i,j)=1]
\]
\[=\sum_{d=1}^n\rho(d) \sum_{k=1}^\frac{n}{d}\mu(k)\sum_{i=1}^\frac{n}{kd}\sum_{j=1}^\frac{n}{kd}\rho(i*kd)\rho(j*kd)
\]
\[=\sum_{T=1}^n\sum_{d|T} \rho(d)\mu(\frac{T}{d})\sum_{i=1}^\frac{n}{T}\sum_{j=1}^\frac{n}{T}\rho(i*T)\rho(j*T)
\]
\[=\sum_{T=1}^n \sum_{i=1}^\frac{n}{T}\sum_{j=1}^\frac{n}{T}\rho(i*T)\rho(j*T)
\]

\(\rho*\mu=1*1*\mu=1*e\)即值始终为\(1.\)

这题所学到的主要是线性筛约数个数\(\rho\):

前提:唯一分解定理 \(n=\prod_{i=1}^k p_i^{a_i},\rho(n)=\prod (a_i+1)\)

设\(g\)是最小质因数的次数,\(t\)是约数个数。

对于质数:显然\(g=1,t=2(1,p).\)

令\(n=i*p[j]:\)

若\(i\equiv 0\bmod p[j],g[n]=g[i]+1,t[n]=\frac{t[i]*(g[n]+1)}{g(n)}\)

否则\(g[n]=1,t[n]=t[i]*2.\)

解释:对于非质数的第二种情况,最小质因子次数一定是一个质数不必解释,而因子个数由于多了一个质因子,所以由上述唯一分解定理会使得原来的\(g\)变为两倍(多乘了一个\(c_p+1,c_p=1.\))

对于非质数的第一种情况,最小质因子一定是当前的\(p[j],\)所以最小质因子次数就是\(g[i]+1,\)而约数个数需要先把\(i\)的\(p[j]\)因子除尽再乘上当前的这个,实际上就是把\(c_{p[j]}\)加了一。

于是这题可以在不用 Dirichlet前缀和 的情况下做到\(O(n\ln n+n\ln n).\)

#include<bits/stdc++.h>
using namespace std;
const int MAXN=2e6;
int n,m,pp,vis[MAXN+1],cnt,p[MAXN+1],t[MAXN+1],g[MAXN+1],Tn[MAXN+1],Tm[MAXN+1],ans;
inline int add(int x,int y){return (x+y)%pp;}
inline int mul(int x,int y){return 1ll*x*y%pp;}
inline void predo(){
t[1]=1;
for(int i=2;i<=MAXN;++i){
if(!vis[i])p[++cnt]=i,g[i]=1,t[i]=2;
for(int j=1;j<=cnt&&i*p[j]<=MAXN;++j){
vis[i*p[j]]=1;
if(i%p[j]==0){
g[i*p[j]]=g[i]+1;
t[i*p[j]]=mul(t[i]/g[i*p[j]],(g[i*p[j]]+1));
break;
}
g[i*p[j]]=1;
t[i*p[j]]=t[i]<<1;
}
}
}
int main(){
scanf("%d%d%d",&n,&m,&pp);
predo();
if(n>m)swap(n,m);
for(int i=1;i<=n;++i)
for(int j=1;j<=n/i;++j)
Tn[i]=add(Tn[i],t[i*j]);
for(int i=1;i<=m;++i)
for(int j=1;j<=m/i;++j)
Tm[i]=add(Tm[i],t[i*j]);
for(int T=1;T<=n;++T)
ans=add(ans,mul(Tn[T],Tm[T]));
printf("%d\n",ans);
return 0;
}

【题解】「MCOI-02」Convex Hull 凸包的更多相关文章

  1. P6810 「MCOI-02」Convex Hull 凸包

    Link 一句话题意: 求出 \(\displaystyle\sum_{i=1}^{n}\sum_{j=1}^{m}\tau(i)\tau(j)\tau(gcd(i,j))\) 前置知识 \(diri ...

  2. 【题解】「UVA681」Convex Hull Finding

    更改了一下程序的错误. Translation 找出凸包,然后逆时针输出每个点,测试数据中没有相邻的边是共线的.多测. Solution 首先推销一下作者的笔记 由此进入>>> ( ...

  3. 【题解】「UVA11626」Convex Hull

    凸包模板题. 之前写过拿 Graham 算法求凸包的,为了不重复/多学点知识,那这次拿 Andrew 算法求凸包吧qaq *此文章所有图片均为作者手画. Andrew 算法 假设我们有这些点: 首先把 ...

  4. [GYM 100492A] Average Convex Hull 凸包好题

    大致题意: 给出一个点集,其中有一个点有相同的几率会被删除,求删除之后的点集够成的凸包上的点的平均数. 首先看到题目,可以考虑枚举删除的点,将其凸包上前后两点以及两点间凸包内所有点构建凸包,因为凸包内 ...

  5. Opencv Convex Hull (凸包)

    #include <iostream>#include <opencv2/opencv.hpp> using namespace std;using namespace cv; ...

  6. 2.2 convex hull凸包

    1.定义:一组平面上的点,求一个包含所有点的最小的凸多边形,就是凸包问题. 利用编程解决凸包问题,应该得到一组逆时针的顶点的顺序集合,在边上但不是顶点,则不包含在集合里. 2.机械的方法:将点所在的位 ...

  7. 题解 「THUPC 2017」小 L 的计算题 / Sum

    题目传送门 题目大意 给出 \(a_{1,2,...,n}\),对于 \(\forall k\in [1,n]\) ,求出: \[\sum_{i=1}^{n}a_i^k \] \(n\le 2\tim ...

  8. 凸包(Convex Hull)构造算法——Graham扫描法

    凸包(Convex Hull) 在图形学中,凸包是一个非常重要的概念.简明的说,在平面中给出N个点,找出一个由其中某些点作为顶点组成的凸多边形,恰好能围住所有的N个点. 这十分像是在一块木板上钉了N个 ...

  9. OpenCV入门之寻找图像的凸包(convex hull)

    介绍   凸包(Convex Hull)是一个计算几何(图形学)中的概念,它的严格的数学定义为:在一个向量空间V中,对于给定集合X,所有包含X的凸集的交集S被称为X的凸包.   在图像处理过程中,我们 ...

随机推荐

  1. USB Key

    随着互联网和电子商务的发展,USB Key作为网络用户身份识别和数据保护的“电子钥匙”,正在被越来越多的用户所认识和使用.本文对USB Key的产生和未来的发展趋势作了一个简单的介绍. 目前市场上见到 ...

  2. Fitness - 06.01

    倒计时213天 久违的瑜伽课,却发现生疏了很多,倒地不起TAT 要加强锻炼,不要松懈啊~~~! 期待黄金周的到来!!

  3. django学习(二)

    1.反向解析 什么是方向解析呢? 通过一些方法得到一个结果,该结果可以直接访问对应url出发视图函数. 先给一个路由和视图函数起一个别名.但是我们要注意的是反向解析的别名是不可以冲突的!!!不然会出现 ...

  4. 小程序mpvue中flyio的使用方法

    Fly.js 一个基于Promise的.强大的.支持多种JavaScript运行时的http请求库. 有了它,您可以使用一份http请求代码在浏览器.微信小程序.Weex.Node.React Nat ...

  5. mysql jdbc连接时的小问题java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: YES)

    这次重新修改老程序时出现了上面的错误,排查过后最终找到问题所在:root帐户默认不开放远程访问权限,所以需要修改一下相关权限. 打开MySQL目录下的my.ini文件(win10默认安装在C:\Pro ...

  6. MySql 实现数组根据下标获取对应值逻辑(array[i]逻辑)

    在使用sql模拟一段java逻辑开发时碰到有一段逻辑为从字符串数组中根据下标获取对应的值的情况,百度了一番没有发现有类似功能的函数和现成的实现方式,经过调试弄出来了,记录下来,以备参考 //举例:从数 ...

  7. 工具-Typora常用语法()+自己总结

    工具-Typora常用语法 Markdown(MD)作为目前互联网写作相当流行的一种文档撰写语言格式,深受互联网编辑者的喜爱,由此周边一些基于MD的编辑工具也随之油然而生. 作为一款免费的MD编辑器: ...

  8. spring5源码 -- IOC容器设计理念和核心注解的作用

    一. spring源码整体脉络介绍及源码编译 二. Spring IOC的源码深入学习 2.1 ioc容器的加载过程(重要) 2.2 bean的生命周期源码深度剖析 2.3 循环依赖总结讲解 2.4 ...

  9. 发现新世界:神级浏览器插件TamperMonkey(暴力猴)

    由于谷歌浏览器各种受限 于是我就先使用火狐浏览器尝试此插件 步骤非常简单. 1.在火狐浏览器内打开如下网址:https://addons.mozilla.org/zh-CN/firefox/addon ...

  10. redis设置密码和查询密码

    编辑redis.windows.conf配置来启用认证. 1.初始化Redis密码: 在配置文件中有个参数: requirepass  这个就是配置redis访问密码的参数: 比如 requirepa ...