hdu3208 很迷的题,组合数学,精度

来源:互联网 发布:新手淘宝客推广 编辑:程序博客网 时间:2024/06/13 20:33

题解来自这篇博客:http://blog.csdn.net/ramay7/article/details/51920916

题意:求[a,b]中每一个数n写成x^y形式(多种表示只取最大幂y)的y的和 hdu3208

第一反应前缀和,然而看到1e18,1s内求,光遍历都吃不消好吗

想了一下,n以内能开方的数有根号n个

也就是1~n以内能写成a^2形式的有根号n个(向下取整)

比如n=12 只有1 2 3满足要求

i^2<=n

1<=i<=sqrt(n) 均可取

所以i有sqrt(n)个

那么n以内写成i^3,i^4的个数也是同理

这种感觉就像问:n以内能整除3的有多少个正数, 1<=i<=n/3

就是n/3个,一个意思

回到原题,所以我们只要算ans=i*n^(1/i)=i*num[i]就好了 1<=i<=62 2^62>1e18

然而!,问题是64能写成2^6 4^4 8^2,

a^2形式的数目要减掉a^4形式的数目

因为a^4=(a^2)^2的数目都在a^2里面被算过了

所以num[2]-=num[4] 减掉的部分已经在更大的幂(4)中出现

同理:num[2]-=num[6],num[2]-=num[8] ,num[4]-=num[8]....

对于每一个num[j]都要减去i%j==0的num[i],i>j

n^(1/i)精度的部分没搞懂,推荐看下面的博客

题解来自这篇博客:http://blog.csdn.net/ramay7/article/details/51920916

原创粉丝点击