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

题解来自这篇博客: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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值