【题解】「MCOI-02」Convex Hull 凸包
\(\text{Solution:}\)
\]
\]
\]
\]
\]
\]
\(\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 凸包的更多相关文章
- P6810 「MCOI-02」Convex Hull 凸包
Link 一句话题意: 求出 \(\displaystyle\sum_{i=1}^{n}\sum_{j=1}^{m}\tau(i)\tau(j)\tau(gcd(i,j))\) 前置知识 \(diri ...
- 【题解】「UVA681」Convex Hull Finding
更改了一下程序的错误. Translation 找出凸包,然后逆时针输出每个点,测试数据中没有相邻的边是共线的.多测. Solution 首先推销一下作者的笔记 由此进入>>> ( ...
- 【题解】「UVA11626」Convex Hull
凸包模板题. 之前写过拿 Graham 算法求凸包的,为了不重复/多学点知识,那这次拿 Andrew 算法求凸包吧qaq *此文章所有图片均为作者手画. Andrew 算法 假设我们有这些点: 首先把 ...
- [GYM 100492A] Average Convex Hull 凸包好题
大致题意: 给出一个点集,其中有一个点有相同的几率会被删除,求删除之后的点集够成的凸包上的点的平均数. 首先看到题目,可以考虑枚举删除的点,将其凸包上前后两点以及两点间凸包内所有点构建凸包,因为凸包内 ...
- Opencv Convex Hull (凸包)
#include <iostream>#include <opencv2/opencv.hpp> using namespace std;using namespace cv; ...
- 2.2 convex hull凸包
1.定义:一组平面上的点,求一个包含所有点的最小的凸多边形,就是凸包问题. 利用编程解决凸包问题,应该得到一组逆时针的顶点的顺序集合,在边上但不是顶点,则不包含在集合里. 2.机械的方法:将点所在的位 ...
- 题解 「THUPC 2017」小 L 的计算题 / Sum
题目传送门 题目大意 给出 \(a_{1,2,...,n}\),对于 \(\forall k\in [1,n]\) ,求出: \[\sum_{i=1}^{n}a_i^k \] \(n\le 2\tim ...
- 凸包(Convex Hull)构造算法——Graham扫描法
凸包(Convex Hull) 在图形学中,凸包是一个非常重要的概念.简明的说,在平面中给出N个点,找出一个由其中某些点作为顶点组成的凸多边形,恰好能围住所有的N个点. 这十分像是在一块木板上钉了N个 ...
- OpenCV入门之寻找图像的凸包(convex hull)
介绍 凸包(Convex Hull)是一个计算几何(图形学)中的概念,它的严格的数学定义为:在一个向量空间V中,对于给定集合X,所有包含X的凸集的交集S被称为X的凸包. 在图像处理过程中,我们 ...
随机推荐
- React.Fragment
React 中一个常见模式是为一个组件返回多个元素.Fragments 可以让你聚合一个子元素列表,并且不在DOM中增加额外节点. Fragments 看起来像空的 JSX 标签: render() ...
- 初学WebGL引擎-BabylonJS:第1篇-基础构造
继续上篇随笔 步骤如下: 一:http://www.babylonjs.com/中下载源码.获取其中babylon.2.2.js.建立gulp项目
- Lua C API 书籍
https://www.oreilly.com/library/view/creating-solid-apis/9781491986301/ https://www.lua.org/notes/lt ...
- 记录一个基于Java的利用快排切分来实现快排TopK问题的代码模板
使用快排切分实现快排和TopK问题的解题模板 import java.util.Arrays; public class TestDemo { public static void main(Stri ...
- Selenium-WebDriver安装
一.chrome浏览器: 根据chrome浏览器版本,下载对应的驱动 chromedriver版本 支持的Chrome版本 v2.37 v64-66 v2.36 v63-65 v2.35 v62-64 ...
- Linux系统环境基于Docker搭建Mysql数据库服务实战
开放端口规划: mysql-develop:3407 mysql-test: 3408 mysql-release: 3409 ps: 1.不推荐使用默认端口-3306,建议自定义端口 2.如果采用阿 ...
- Git | Git入门,成为项目管理大师(一)
大家好,周一我们迎来了一个新的专题--git. 写这个专题的初衷有两点,第一点是觉得好像很少有公众号提到git相关的技术,可能是觉得太基础了看不上.但实际上git非常重要,在我们实际的开发工作当中使用 ...
- [LeetCode]739. 每日温度(单调栈)
题目 根据每日 气温 列表,请重新生成一个列表,对应位置的输入是你需要再等待多久温度才会升高超过该日的天数.如果之后都不会升高,请在该位置用 0 来代替. 例如,给定一个列表 temperatures ...
- Erlang+RabbitMQ Server的详细安装
Erlang(['ə:læŋ])是一种通用的面向并发的编程语言, 它有瑞典电信设备制造商爱立信所辖的CS-Lab开发,目的是创造一种可以应对大规模并发活动的编程语言和运行环境. Erlang官网:ht ...
- 确成硅化+恒力+苏大文正节点2 oracle ora-4030 错误pga version:11204
Errors in file /u01/app/oracle/oracle/diag/rdbms/orcl/orcl/trace/orcl_j000_61543.trc (incident=18009 ...