【题解】「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的凸包. 在图像处理过程中,我们 ... 
随机推荐
- ArcGIS Pro 二次开发
			本文基于 Windows7 + VS2019 + .NET Framework 4.8 + ArcGIS Pro 2.5.22081 开发和撰写. 目录 开发环境配置 获取ArcGIS Pro 安装V ... 
- Selenium执行js脚本
			如何使用Selenium来执行Javascript脚本呢 Selenium中提供了一个方法:execute_script 来执行js脚本 return 可以返回js的返回结果 execute_scri ... 
- Springboot整合Spring Cloud Kubernetes读取ConfigMap,支持自动刷新配置
			1 前言 欢迎访问南瓜慢说 www.pkslow.com获取更多精彩文章! Docker & Kubernetes相关文章:容器技术 之前介绍了Spring Cloud Config的用法,但 ... 
- HOOK SSDK
			HOOK SSDT主要代码 #pragma once #include <ntifs.h> /* * * * * * * * * * * * * * * * * * * * * * * * ... 
- FZU - 2037 -Maximum Value Problem(规律题)
			Let’s start with a very classical problem. Given an array a[1…n] of positive numbers, if the value o ... 
- hdu6704 2019CCPC网络选拔赛1003 K-th occurrence 后缀自动机+线段树合并
			解题思路: fail树上用权值线段树合并求right/endpos集合,再用倍增找到待查询串对应节点,然后权值线段树求第k大. #include<bits/stdc++.h> using ... 
- 14_Web服务器-并发服务器
			1.服务器概述 1.硬件服务器(IBM,HP): 主机 集群 2.软件服务器(HTTPserver Django flask): 网络服务器,在后端提供网络功能逻辑处理数据处理的程序或者架构等 3.服 ... 
- 用Python实现十大经典排序算法-插入、选择、快速、冒泡、归并等
			本文来用图文的方式详细讲解了Python十大经典排序算法 —— 插入排序.选择排序.快速排序.冒泡排序.归并排序.希尔排序.插入排序.桶排序.基数排序.计数排序算法,想要学习的你们,继续阅读下去吧,如 ... 
- 在logback的fileNamePattern配置%i 带来的异常
			我在logback的配置文件中企图这样配置: <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPol ... 
- python模块:excel的读和修改xlrd/xultils
			一.xlrd xlrd只能对excel进行读取,不可编辑修改.该模块属于第三方模块,需要安装模块包并引入.pip install xlrd 常用的方法: import xlrd book = xlrd ... 
