若直线的斜率为0或者不存在斜率,则有$nC(m,3)+mC(n,3)$种方案。若直线的斜率不为0,只需考虑斜率为正的情况,最后答案再乘以2即可。枚举两个点的坐标差,设$t=\min(n,m)$,则有:

\[\begin{eqnarray*}
ans&=&\sum_{i=1}^n\sum_{j=1}^m(n-i)(m-j)(\gcd(i,j)-1)\\
&=&\sum_{d=1}^t\sum_{i=1}^n\sum_{j=1}^m[\gcd(i,j)=d](n-i)(m-j)(\gcd(i,j)-1)\\
&=&\sum_{d=1}^t\sum_{i=1}^{\lfloor\frac{n}{d}\rfloor}\sum_{j=1}^{\lfloor\frac{m}{d}\rfloor}[\gcd(i,j)=1](n-di)(m-dj)(d-1)\\
&=&\sum_{d=1}^t(d-1)\sum_{i=1}^{\lfloor\frac{n}{d}\rfloor}\sum_{j=1}^{\lfloor\frac{m}{d}\rfloor}(n-di)(m-dj)\sum_{k|\gcd(i,j)}\mu(k)\\
&=&\sum_{d=1}^t(d-1)\sum_{i=1}^{\lfloor\frac{n}{d}\rfloor}\sum_{j=1}^{\lfloor\frac{m}{d}\rfloor}(n-di)(m-dj)\sum_{k|i,k|j}\mu(k)\\
&=&\sum_{d=1}^t(d-1)\sum_{k}\mu(k)\sum_{k|i}\sum_{k|j}(n-di)(m-dj)\\
&=&\sum_{d=1}^t(d-1)\sum_{k}\mu(k)\sum_{k|i}(n-di)\sum_{k|j}(m-dj)\\
&=&\sum_{d=1}^t(d-1)\sum_{k}\mu(k)cal(n,d,k)cal(m,d,k)
\end{eqnarray*}\]

  其中:

\[\begin{eqnarray*}
cal(n,d,k)&=&\sum_{k|i}(n-di)\\
&=&n\sum_{k|i}1-d\sum_{k|i}i\\
&=&n\lfloor\frac{n}{dk}\rfloor-\frac{dk(1+\lfloor\frac{n}{dk}\rfloor)\lfloor\frac{n}{dk}\rfloor}{2}
\end{eqnarray*}\]

  设$D=dk$,则有:

\[\begin{eqnarray*}
F(n,D)=cal(n,d,k)&=&n\lfloor\frac{n}{dk}\rfloor-\frac{dk(1+\lfloor\frac{n}{dk}\rfloor)\lfloor\frac{n}{dk}\rfloor}{2}\\
&=&n\lfloor\frac{n}{D}\rfloor-\frac{D(1+\lfloor\frac{n}{D}\rfloor)\lfloor\frac{n}{D}\rfloor}{2}\\
ans&=&\sum_{d=1}^t(d-1)\sum_{k}\mu(k)cal(n,d,k)cal(m,d,k)\\
&=&\sum_{k=1}^t\mu(k)\sum_{d}(d-1)cal(n,d,k)cal(m,d,k)\\
&=&\sum_{k=1}^t\mu(k)\sum_{k|D}(\frac{D}{k}-1)F(n,D)F(m,D)\\
&=&\sum_{D=1}^t F(n,D)F(m,D)\sum_{k|D}\mu(k)(\frac{D}{k}-1)\\
&=&\sum_{D=1}^t F(n,D)F(m,D)(\sum_{k|D}\mu(k)\frac{D}{k}-\sum_{k|D}\mu(k))\\
&=&\sum_{D=1}^t F(n,D)F(m,D)(\varphi(D)-[D=1])
\end{eqnarray*}\]

  综上所述,只需要一遍线性筛求出所有欧拉函数然后计算即可,时间复杂度$O(n)$。

#include<cstdio>
typedef long long ll;
const int N=50010,P=1000000007;
int n,m,t,i,j,ans,phi[N],v[N],p[N],tot;
inline ll cal(ll n,ll d){return n/d*n-d*(n/d)*(n/d+1)/2;}
ll C(ll n){return n*(n-1)*(n-2)/6;}
int main(){
scanf("%d%d",&n,&m);t=n<m?n:m;
for(phi[1]=1,i=2;i<=t;i++){
if(!v[i])p[++tot]=i,phi[i]=i-1;
for(j=1;j<=tot;j++){
if(i*p[j]>t)break;
v[i*p[j]]=1;
if(i%p[j]==0){phi[i*p[j]]=phi[i]*p[j];break;}else phi[i*p[j]]=phi[i]*(p[j]-1);
}
}
for(i=1;i<=t;i++)ans=(ans+cal(n,i)%P*cal(m,i)%P*(phi[i]-(i==1))%P)%P;
return printf("%d",(ans*2%P+C(m)%P*n%P+C(n)%P*m%P)%P),0;
}

  

BZOJ3518 : 点组计数的更多相关文章

  1. 【BZOJ3518】点组计数 欧拉函数

    [BZOJ3518]点组计数 Description 平面上摆放着一个n*m的点阵(下图所示是一个3*4的点阵).Curimit想知道有多少三点组(a,b,c)满足以a,b,c三点共线.这里a,b,c ...

  2. 【BZOJ3518】点组计数

    Description 平面上摆放着一个\(n*m\)的点阵(下图所示是一个3*4的点阵).Curimit想知道有多少三点组(a,b,c)满足以a,b,c三点共线.这里a,b,c是不同的3个点,其顺序 ...

  3. 【bzoj3518】点组计数 欧拉函数(欧拉反演)

    题目描述 平面上摆放着一个n*m的点阵(下图所示是一个3*4的点阵).Curimit想知道有多少三点组(a,b,c)满足以a,b,c三点共线.这里a,b,c是不同的3个点,其顺序无关紧要.(即(a,b ...

  4. BZOJ 3518 点组计数 ——莫比乌斯反演

    要求$ans=\sum_{i=1}^n \sum_{j=1}^m (n-i)(m-j)(gcd(i,j)-1)$ 可以看做枚举矩阵的大小,然后左下右上必须取的方案数. 这是斜率单增的情况 然后大力反演 ...

  5. 欧拉函数(汇总&例题)

    定义 欧拉函数 $\varphi(n)$表示小于等于$n$的正整数中与$n$互质的数的数目. 性质 1.积性函数(证明). 2.$\varphi(1)=1$(显然) 3.对于质数$n$,$\varph ...

  6. .NET正则基础之——平衡组

    1        概述 平衡组是微软在.NET中提出的一个概念,主要是结合几种正则语法规则,提供对配对出现的嵌套结构的匹配..NET是目前对正则支持最完备.功能最强大的语言平台之一,而平衡组正是其强大 ...

  7. .NET正则平衡组

    1        概述 平衡组是微软在.NET中提出的一个概念,主要是结合几种正则语法规则,提供对配对出现的嵌套结构的匹配..NET是目前对正则支持最完备.功能最强大的语言平台之一,而平衡组正是其强大 ...

  8. 机器学习常用Python扩展包

    在Ubuntu下安装Python模块通常有3种方法:1)使用apt-get:2)使用pip命令(推荐);3)easy_instal 可安装方法参考:[转]linux和windows下安装python集 ...

  9. RTCP资料详解

    转自:http://www.360doc.com/content/13/0606/10/1317564_290865866.shtml RTCP RTCP协议将控制包周期发送给所有连接者,应用与数据包 ...

随机推荐

  1. Java与groovy混编 —— 一种兼顾接口清晰和实现敏捷的开发方式

    有大量平均水平左右的"工人"可被选择.参与进来 -- 这意味着好招人 有成熟的.大量的程序库可供选择 -- 这意味着大多数项目都是既有程序库的拼装,标准化程度高而定制化场景少 开发 ...

  2. Dubbo学习笔记10:Dubbo服务消费方启动流程源码分析

    同理我们看下服务消费端启动流程时序图: 在<Dubbo整体架构分析>一文中,我们提到服务消费方需要使用ReferenceConfig API来消费服务,具体是调用代码(1)get()方法来 ...

  3. 【转载】视频CDN技术原理与流程说明

    视频CDN专为移动互联网视频内容分发量身定做的一套自主研发的分布式平台,该平台以深圳为中心,分布在全国各地BGP机房的服务器为边缘节点,汇聚中国电信.中国联通.中国移动.中国教育网等运营商网络资源,构 ...

  4. android tools相关

    1.showin 在include 的根节点设置,可一预览效果

  5. [百度地图] 用于类似 DWZ UI 框架的 百度地图 功能封装类 [MultiZMap.js] 实例源码

    MultiZMap 功能说明 MultiZMap.js 本类方法功能大多使用 prototype 原型 实现,它是 ZMap 的多加载版本,主要用于类似 DWZ 这个 多标签的 UI 的框架: 包含的 ...

  6. Django用ajax进行post请求

    post请求有两种,跨域和不跨域 1.不跨域 # 不跨域的 view.py def re_json(request): print(request.POST['name']) p1 = Product ...

  7. 【干货】查看windows文件系统中的数据—利用簇号查看文件与恢复文件

    前面我们使用这个软件发现了很多删除掉的数据,今天来看看簇.FAT文件系统中,存在一个簇的链接,我知道了簇1在哪里就可以顺藤摸瓜恢复所有的信息. 这里使用FAT 12为例子,FAT其他万变不离其宗,甚至 ...

  8. sh-copy-id命令报错:-bash: ssh-copy-id: command not found

    参考网址:http://www.bubuko.com/infodetail-1662159.html yum -y install openssh-clients

  9. PHPStorm 配置本地服务器

    本篇教程为配置 PHPStorm 本地服务器,以方便程序调试. 本地服务器工具:XAMPP for windows 7.1.1-0 / Apache 2.4.25 ( Win32 ) / PHP 7. ...

  10. ICCV2013 录用论文(目标跟踪相关部分)(转)

    单目标(表观模型): 1. Seunghoon Hong, BohyungHan. Orderless Trackingthrough Model-Averaged Density Estimatio ...