码迷,mamicode.com
首页 > 其他好文 > 详细

51 NOD 1238 最小公倍数之和 V3

时间:2016-07-09 10:32:41      阅读:269      评论:0      收藏:0      [点我收藏+]

标签:

原题链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1238

 

最近被51NOD的数论题各种刷……(NOI快到了我在干什么啊!

然后发现这题在网上找不到题解……那么既然A了就来骗一波访问量吧……

(然而并不会用什么公式编辑器,凑合着看吧……

 Σ(1<=i<=n) Σ(1<=j<=n) i*j/gcd(i,j)

=Σ(1<=d<=n) d * Σ(1<=i<=[n/d]) Σ(1<=j<=[n/d]) i*j*[gcd(i,j)==1]

=Σ(1<=d<=n) d * Σ(1<=d‘<=[n/d])  f([n/d/d‘])*d‘^2*mui(d‘)

=Σ(1<=d‘<=n) d‘^2*mui(d‘) Σ(1<=d<=[n/d‘])  d*f([n/d/d‘])

这里f(x)=(x*(x+1)/2)^2,即1到x中数字之间两两乘积之和。

 

可以看出不同的[n/d‘]只有根号n个,对于某一个[n/d‘],不同的[n/d/d‘]也只有根号n个,那么把它们压在一起处理就好了。

但是要做到这一点需要快速求出d‘^2*mui(d‘)的前缀和,这时就要用上杜教筛了。

记g(x)=x^2*mui(x),S(x)=Σ(1<=i<=x) g(i)

那么Σ(1<=i<=n) Σ (x|i) g(x)*(n/x)^2=Σ(1<=i<=n) Σ(x|i) mui(x)=Σ(1<=i<=n) [i==1] = 1

同时Σ(1<=i<=n) Σ (x|i) g(x)*(n/x)^2=Σ(1<=i<=n) Σ(1<=x<=[n/i]) g(x)*i^2= Σ(1<=i<=n) i^2*S[n/i]

可以得到S(n)=1-Σ(2<=i<=n) i^2*S[n/i],预处理+哈希维护一波就行了

但是不知道是我常数太大,还是方法没别人优越,卡了很久常数才卡过去。

代码自己码啦!

 

51 NOD 1238 最小公倍数之和 V3

标签:

原文地址:http://www.cnblogs.com/Enceladus/p/5655267.html

(1)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!