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 & ...
随机推荐
- SVN学习
一.SVN在线安装(Eclipse) 步骤1: 步骤2 其中http://subclipse.tigris.org/update_1.10.x是最新版本的SVN插件的下载站点[subclipse是Ec ...
- MITK Tutorial (三)
Step 2: Use the template with the plugins to read a image 在exampleplugin插件中QmitkAwesomeView.cpp中添加头文 ...
- android 设置叠加父级响应点击事件
最近做android项目时,需要让button的后面的relatelayout可以点击,但是虽然把button设置成了focusable="false",relatelayout中 ...
- TS流格式(转)
一 从TS流开始 数字电视机顶盒接收到的是一段段的码流,我们称之为TS(Transport Stream,传输流),每个TS流都携带一些信息,如Video.Audio以及我们需要学习的PAT.PMT等 ...
- tomcat内存溢出,设置
tomcat/bin/catalina.bat里找到echo Using CATALINA_BASE: "%CATALINA_BASE%" ,在上方设置: set JAV ...
- 2693: jzptab - BZOJ
Description Input 一个正整数T表示数据组数接下来T行 每行两个正整数 表示N.MOutput T行 每行一个整数 表示第i组数据的结果Sample Input 1 4 5 Sampl ...
- 【BZOJ】【1565】【NOI2009】PVZ 植物大战僵尸
网络流/最大权闭合子图+拓扑排序 感动死了>_<,一年多以前刚知道网络流的时候听说了这道名字很带感的题目,现在终于有实力切掉它了. 这题是最大权闭合子图模型的经典应用<_<,首 ...
- 【BZOJ】【1026】【SCOI2009】Windy数
数位DP cxlove基础数位DP第三题 = =预处理是个很有用的东西!然后就是分类讨论! /***************************************************** ...
- [CF]codeforces round#366(div2)滚粗记
开场心理活动:啊打完这场大概有1700了吧 中途心理活动:啊这个ABC看起来都随便做啊 死亡原因:欸怎么没网了 -75 .. A [题意]Hulk说完一句I hate会说that I love 然后是 ...
- C#中sealed关键字
C#中sealed关键字 1. sealed关键字 当对一个类应用 sealed 修饰符时,此修饰符会阻止其他类从该类继承.类似于Java中final关键字. 在下面的示例中,类 B ...