HDU 4483 Lattice triangle(欧拉函数)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4483
题意:给出一个(n+1)*(n+1)的格子。在这个格子中存在多少个三角形?
思路:反着想,所有情况减去不是三角形的。下面计算不是三角形的。
(1)我们用C(n,m)表示组合数。考虑共线,一共有C((n+1)*(n+1),3)种情况。然后,要减去共线的情况。首先,三个点在同一行或者同一列,这种情况有2*(n+1)*C(n+1,3);最后就是斜着共线的情况;
(2)对于斜着共线的情况,我们可以枚举两个端点,然后看这两个端点之间有多少个点。我们发现,我们枚举两个端点时其实就是枚举一个小矩形的两个相对的顶点,我们知道,设矩形长宽为x,y,那么矩形对角线上有Gcd(x,y)+1个点,除去两个端点,中间有Gcd(x,y)-1个点。所以此次枚举需要减去的三角形个数为(Gcd(x,y)-1)*2。为啥乘以2呢?因为矩形的另外一个对角线也是相同的。接着,我们发现,这样的三角形一共有(n+1-x)*(n+1-y)个,所以枚举x、y时需要减去的总数为:(Gcd(x,y)-1)*(n+1-x)*(n+1-y)*2,因此,我们可以这样计算斜线共线的个数:
这个复杂度是O(n^2)的。下面我们优化这个计算过程。我们现在直接枚举i和j的Gcd值,设为k,即Gcd(i,j)=k,那么Gcd(i/k,j/k)=1,令a=i/k,b=j/k,那么对于当前的k我们首先看有多少组(x,y)满足Gcd(x,y)=k,也就是多少组 (x,y)满足gcd(x,y)=1,x<=a,y<=b,由于对称性,我们不妨设a<=b,那么此时(x,y)的对数就是:
其中,那个1表示(x,y)=(1,1),后面的phi表示欧拉函数,乘以2是因为x和y的对称性,我们此时是假设的a<=b,也即x<y(注意除了开始的(1,1)后面不会有x=y 的,因为Gcd(x,y)=1),x和y是可以交换位置的。这样对于某个k我们就求出了有多少对(x,y)满足Gcd(x,y)=k。接着,我们看上面那个式子:
因为满足Gcd(x,y)=k的(x,y)的对数已经计算出来。而上面的式子中是指对于其中的某一对(x,y)计算的,我们令式子中(n+1)^2、(n+1)*K、k^2的系数分别为A、B、C,那么有:
其中phi容易计算。那么B和C怎么计算呢?对于n,若Gcd(n,m)=1,那么Gcd(n,n-m)=1。也就是与n互质的数字是成对出现的,而且和为n。所以[1,n]中与n互质的数字之和为:phi[n]/2*n。这样,就能使用phi计算出B和C了。
i64 A[N],B[N],C[N],phi[N];
void init()
{
A[1]=C[1]=1; B[1]=2;
int i,j;
phi[1]=1;
for(i=2;i<N;i++) if(!phi[i])
{
for(j=i;j<N;j+=i)
{
if(!phi[j]) phi[j]=j;
phi[j]-=phi[j]/i;
}
}
for(i=2;i<N;i++)
{
A[i]=(A[i-1]+phi[i]*2)%mod;
B[i]=(B[i-1]+phi[i]*i*3)%mod;
C[i]=(C[i-1]+phi[i]*i%mod*i)%mod;
}
}
i64 n;
int C3(i64 x)
{
if(x<=2) return 0;
i64 a=(x-1)%mod,b=(x-2)%mod,c=166666668;
return x%mod*a%mod*b%mod*c%mod;
}
i64 M(i64 x,i64 y,i64 z)
{
return x*y%mod*z%mod;
}
int main()
{
init();
rush()
{
RD(n);
i64 ans=C3((n+1)*(n+1))-2*(n+1)*C3(n+1)%mod;
i64 temp=0;
i64 i,k;
for(i=2;i<=n;i++)
{
k=n/i;
temp+=(i-1)*(M(n+1,n+1,A[k])-M(n+1,i,B[k])+M(i,i,C[k]))%mod;
temp%=mod;
}
ans-=temp*2;
ans=(ans%mod+mod)%mod;
PR(ans);
}
return 0;
}
HDU 4483 Lattice triangle(欧拉函数)的更多相关文章
- HDU 1695 GCD (欧拉函数+容斥原理)
GCD Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...
- HDU 5430 Reflect(欧拉函数)
题目: http://acm.hdu.edu.cn/showproblem.php?pid=5430 从镜面材质的圆上一点发出一道光线反射NNN次后首次回到起点. 问本质不同的发射的方案数. 输入描述 ...
- hdu 5279 Reflect phi 欧拉函数
Reflect Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://bestcoder.hdu.edu.cn/contests/contest_chi ...
- HDU 1695 GCD(欧拉函数+容斥原理)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1695 题意:x位于区间[a, b],y位于区间[c, d],求满足GCD(x, y) = k的(x, ...
- POJ3090 Visible Lattice Points 欧拉函数
欧拉函数裸题,直接欧拉函数值乘二加一就行了.具体证明略,反正很简单. 题干: Description A lattice point (x, y) in the first quadrant (x a ...
- HDU 1787 GCD Again(欧拉函数,水题)
GCD Again Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total S ...
- hdu 3501 Calculation 2 (欧拉函数)
题目 题意:求小于n并且 和n不互质的数的总和. 思路:求小于n并且与n互质的数的和为:n*phi[n]/2 . 若a和n互质,n-a必定也和n互质(a<n).也就是说num必定为偶数.其中互质 ...
- hdu 1695 GCD(欧拉函数+容斥)
Problem Description Given 5 integers: a, b, c, d, k, you're to find x in a...b, y in c...d that GCD( ...
- hdu 2814 快速求欧拉函数
/** 大意: 求[a,b] 之间 phi(a) + phi(a+1)...+ phi(b): 思路: 快速求欧拉函数 **/ #include <iostream> #include & ...
随机推荐
- JNI-入门之二
Android中JNI编程的那些事儿 首先说明,Android系统不允许一个纯粹使用C/C++的程序出现,它要求必须是通过Java代码嵌入Native C/C++——即通过JNI的方式来使用本地(Na ...
- 首页视频播放jquery
<script type="text/javascript" src="[!--news.url--]skin/default/js/flowplayer-3.2. ...
- LCA专题
标签(空格分隔): LCA 我的个人网站挂了,最近就先用这个来写博客吧.以后争取在这个网站写一些与OI无关的个人爱好的东西. 题目来源:code[VS] 倍增--在线算法 用 $f[i][j]$ 记录 ...
- 【个人笔记】003-PHP基础-01-PHP快速入门-03-PHP环境搭建
003-PHP基础-01-PHP快速入门 03-PHP环境搭建 1.客户端(浏览器) IE FireFox CHROME Opera Safari 2.服务器 是运行网站的基本 是放置程序代码的地方 ...
- sql2008还原问题
2003的服务器系统不知是因为对SSD的支持不好还是别的原因,系统使用有很多奇怪的问题,所以就升级一下系统,在备份数据库的时候出现了各种问题 源数据库与现数据库都为sqlserver2008,并都安装 ...
- centos 7 有点意思
Centos 7 防火墙 Centos尼马换了防火墙,名叫firewalld,还有iptables命令,这就叫坑爹.整了半个世纪才知道,他换了防火墙.添加滤镜,停止iptables都打不开80端口,简 ...
- c++ 函数返回指针 及用法
#include<string> #include<iostream> using namespace std; string fun1(int a) { string str ...
- 开启VMware Esxi的SSH远程登录
1.在服务器的配置页面中开启 按[F2],输入密码,进入配置页面,选择troubleshooting options,选择EnableSSH 即可. 2.在VMware Client中开启 进入:配置 ...
- javascript小实例,PC网页里的拖拽(转)
这是现在的效果,可能改了一些,原来的效果是,里面的这张图是可以上下左右拖动的,然后房子上面的显示的楼栋号,也跟着图片一起移动,当时js能力还不行,未能实现项目经理的要求,不过后来项目经理又把这个效果推 ...
- 【BZOJ】【1532】【POI2005】Kos-Dicing
网络流/二分法 最大值最小……直接做不太好做的时候就可以用二分+判定来搞. 这题我们就也可以二分最大胜场v,那么怎么来判定呢?首先我们发现:每场比赛要么A赢,要么B赢,这一点跟二分图匹配非常类似,那么 ...