您的位置:首页 > 其它

FZU_2191_完美的数字(数论)

2015-05-03 21:01 288 查看
传送门:http://acm.fzu.edu.cn/problem.php?pid=2191

题型:数论

题意:中文题,不解释。

分析:

因为要求X = A*A*B且B>A,所以,如果单纯计算X的方法数的话,对A枚举到10^5就可以了。

对于区间[a,b],枚举³√b的数k,完美度为b/k² - (a-1)/k²,这里,b/k²≥k,但是(a-1)/k²可能<k,这样左边界其实应该是i-1

所以应该表述成 b/k² - max((a-1)/k² , i-1)

最后输出总和就可以了。

代码:

#include<iostream>
#include<cmath>
#include<cstring>
#include<cstdio>

#define LL __int64
using namespace std;

int main() {

LL a,b;

while(~scanf("%I64d%I64d",&a,&b)){
LL ans = 0;
for(LL i=1;i*i*i<=b;i++){
ans += ( b/(i*i) - max(i-1,(a-1)/(i*i)) );
}
printf("%I64d\n",ans);
}

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: