【洛谷题解】P2303 [SDOi2012]Longge的问题
2018-02-26 22:30
260 查看
转载注:
转载自PinkRabbit的博客园
原文地址
以下是转载内容:
题目传送门:链接。
能自己推出正确的式子的感觉真的很好!
题意简述:
求∑ni=1gcd(i,n)∑i=1ngcd(i,n)。n≤232n≤232。
题解:
我们开始化简式子:
∑ni=1gcd(i,n)∑i=1ngcd(i,n)
=∑nj=1(j×∑ni=1[gcd(i,n)=j])=∑j=1n(j×∑i=1n[gcd(i,n)=j])
=∑nj=1(j×∑ni=1[gcd(i/j,n/j)=1](j|i,j|n))=∑j=1n(j×∑i=1n[gcd(i/j,n/j)=1](j|i,j|n))
=∑nj=1(j×ϕ(n/j)(j|n))=∑j=1n(j×ϕ(n/j)(j|n))
=∑j|n(j×ϕ(n/j))=∑j|n(j×ϕ(n/j))
到这里就可以直接计算了。
但是还可以进一步化简!(以下的p为质数)
∑j|n(j×ϕ(n/j))∑j|n(j×ϕ(n/j))
=∑j|n(n/j×ϕ(j))=∑j|n(n/j×ϕ(j))
=∑j|n(n/j×(j⋅∏p|jp−1p))=∑j|n(n/j×(j⋅∏p|jp−1p))
=∑j|n(n⋅∏p|jp−1p)=∑j|n(n⋅∏p|jp−1p)
=n×∑j|n∏p|jp−1p=n×∑j|n∏p|jp−1p
接下来我们令n=pc11pc22pc33⋯pckkn=p1c1p2c2p3c3⋯pkck,并定义fi=pi−1pifi=pi−1pi。
那么n的因子j可以表示为:j=pc11pc22pc33⋯pckkj=p1c1p2c2p3c3⋯pkck,满足0≤ci≤bi0≤ci≤bi。
那么∏p|jp−1p=∏ki=1fi[ci>0]∏p|jp−1p=∏i=1kfi[ci>0]。
我们观察一类∏ki=1fi[ci>0]∏i=1kfi[ci>0]相等的j,它们必要满足在ii相等的情况下,cici同时大于00或cici同时等于00。
那么这一类的jj有多少个呢?如果这类j有质因子pq1,pq2,pq3,⋯,pqgpq1,pq2,pq3,⋯,pqg。
那么这类jj的答案为∏gi=1fqi∏i=1gfqi,而个数为∏gi=1bqi∏i=1gbqi。
bibi就是原来n的质因数分解的指数。
那么对答案的贡献为:∏gi=1χqi∏i=1gχqi。这里χi=fi⋅biχi=fi⋅bi。
发现每一个质因子的贡献都是独立的,那么最后我们枚举n的每一个质因子取不取,得到最后的答案:n⋅∏ki=1(χi+1)n⋅∏i=1k(χi+1)。
举个例子:如果n只有3个质因子,那么答案为n⋅(1+χ1+χ2+χ3+χ1χ2+χ1χ3+χ2χ3+χ1χ2χ3)n⋅(1+χ1+χ2+χ3+χ1χ2+χ1χ3+χ2χ3+χ1χ2χ3)。
显然可以化简为:n⋅(χ1+1)⋅(χ2+1)⋅(χ3+1)n⋅(χ1+1)⋅(χ2+1)⋅(χ3+1)。
当然可以类比到质因数更多的情况。
总之,答案就是:n⋅∏ki=1bipi−bi+pipin⋅∏i=1kbipi−bi+pipi。
代码:
转载自PinkRabbit的博客园
原文地址
以下是转载内容:
题目传送门:链接。
能自己推出正确的式子的感觉真的很好!
题意简述:
求∑ni=1gcd(i,n)∑i=1ngcd(i,n)。n≤232n≤232。
题解:
我们开始化简式子:
∑ni=1gcd(i,n)∑i=1ngcd(i,n)
=∑nj=1(j×∑ni=1[gcd(i,n)=j])=∑j=1n(j×∑i=1n[gcd(i,n)=j])
=∑nj=1(j×∑ni=1[gcd(i/j,n/j)=1](j|i,j|n))=∑j=1n(j×∑i=1n[gcd(i/j,n/j)=1](j|i,j|n))
=∑nj=1(j×ϕ(n/j)(j|n))=∑j=1n(j×ϕ(n/j)(j|n))
=∑j|n(j×ϕ(n/j))=∑j|n(j×ϕ(n/j))
到这里就可以直接计算了。
但是还可以进一步化简!(以下的p为质数)
∑j|n(j×ϕ(n/j))∑j|n(j×ϕ(n/j))
=∑j|n(n/j×ϕ(j))=∑j|n(n/j×ϕ(j))
=∑j|n(n/j×(j⋅∏p|jp−1p))=∑j|n(n/j×(j⋅∏p|jp−1p))
=∑j|n(n⋅∏p|jp−1p)=∑j|n(n⋅∏p|jp−1p)
=n×∑j|n∏p|jp−1p=n×∑j|n∏p|jp−1p
接下来我们令n=pc11pc22pc33⋯pckkn=p1c1p2c2p3c3⋯pkck,并定义fi=pi−1pifi=pi−1pi。
那么n的因子j可以表示为:j=pc11pc22pc33⋯pckkj=p1c1p2c2p3c3⋯pkck,满足0≤ci≤bi0≤ci≤bi。
那么∏p|jp−1p=∏ki=1fi[ci>0]∏p|jp−1p=∏i=1kfi[ci>0]。
我们观察一类∏ki=1fi[ci>0]∏i=1kfi[ci>0]相等的j,它们必要满足在ii相等的情况下,cici同时大于00或cici同时等于00。
那么这一类的jj有多少个呢?如果这类j有质因子pq1,pq2,pq3,⋯,pqgpq1,pq2,pq3,⋯,pqg。
那么这类jj的答案为∏gi=1fqi∏i=1gfqi,而个数为∏gi=1bqi∏i=1gbqi。
bibi就是原来n的质因数分解的指数。
那么对答案的贡献为:∏gi=1χqi∏i=1gχqi。这里χi=fi⋅biχi=fi⋅bi。
发现每一个质因子的贡献都是独立的,那么最后我们枚举n的每一个质因子取不取,得到最后的答案:n⋅∏ki=1(χi+1)n⋅∏i=1k(χi+1)。
举个例子:如果n只有3个质因子,那么答案为n⋅(1+χ1+χ2+χ3+χ1χ2+χ1χ3+χ2χ3+χ1χ2χ3)n⋅(1+χ1+χ2+χ3+χ1χ2+χ1χ3+χ2χ3+χ1χ2χ3)。
显然可以化简为:n⋅(χ1+1)⋅(χ2+1)⋅(χ3+1)n⋅(χ1+1)⋅(χ2+1)⋅(χ3+1)。
当然可以类比到质因数更多的情况。
总之,答案就是:n⋅∏ki=1bipi−bi+pipin⋅∏i=1kbipi−bi+pipi。
代码:
#include<cstdio> long long n; long long f(){ long long ans=n; long long i; for(i=2;i*i<=n;++i) if(n%i==0){ int b=0; while(n%i==0) ++b,n/=i; ans/=i; ans*=b*i-b+i; } if(n>1) ans/=n, ans*=n+n-1; return ans; } int main(){ scanf("%lld",&n); printf("%lld",f()); return 0; }
相关文章推荐
- 【题解】SDOI-2012 Longge的问题
- 【SDOI2012】【BZOJ2705】【Longge的问题】【题解】【数论】
- BZOJ2705:[SDOI2012]Longge的问题——题解
- 【BZOJ 2705】[SDOI2012]Longge的问题 欧拉函数
- 2705: [SDOI2012]Longge的问题 欧拉函数
- BZOJ_P2705 [SDOI2012]Longge的问题(数论+欧拉函数)
- BZOJ 2705 [SDOI2012]Longge的问题
- bzoj 2705: [SDOI2012]Longge的问题 歐拉函數
- SDOI2012 longge的问题
- bzoj2705 [SDOI2012]Longge的问题
- SDOI2012Longge的问题
- bzoj2705[SDOI2012]Longge的问题 欧拉函数
- BZOJ2705 [SDOI2012]Longge的问题 【欧拉函数】
- BZOJ 2705: [SDOI2012]Longge的问题 [欧拉函数]
- 2705: [SDOI2012]Longge的问题
- BZOJ 2705: [SDOI2012]Longge的问题
- [SDOI2012]Longge的问题 phi运用
- BZoj 2705: [SDOI2012]Longge的问题【数论】
- 洛谷P2303 [SDOi2012]Longge的问题
- BZOJ.2705.[SDOI2012]Longge的问题(莫比乌斯反演 欧拉函数)