您的位置:首页 > 其它

ZOJ 2286 Sum of Divisors(打表)

2013-05-09 18:29 316 查看
可以用筛选法打表.

然后对结果排序,再二分查找.

#include <iostream>
#include <cstdio>
#include <memory.h>
#include <cmath>
#include <algorithm>
using namespace std;

const int maxn = 1000010;
int tb[maxn], m;
void init(){
int idx = 0;
for (int i = 2; i <= 1000000; ++i){
tb[i - 1] += 1;
for (int j = 2; j * i < maxn; ++j){
tb[i * j - 1] += i;
}
}
}

int main(){
init();
sort(tb, tb + 1000000);
while (~scanf("%d", &m)){
int ans = upper_bound(tb, tb + 1000000,m) - tb;
printf("%d\n",ans);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: