博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
poj2668
阅读量:6303 次
发布时间:2019-06-22

本文共 1186 字,大约阅读时间需要 3 分钟。

题意:给出d,n,求d/1+d/2+……+d/n,所有除法向上取整。

分析:我们从两边同时计算,算d/i时,同时算出由面所有d/x等于i的项的和,直到两端汇合。

这些x中的一个应该是minx = d/i向上取整,因为minx*i>=d且(minx-1)*i<d,所以d/minx<=i且d/(minx-1)>i。也就是说minx再小一点那么d/minx向上取整的结果就会比i大。

复杂度为sqrt(n)。

View Code
#include 
#include
#include
#include
using namespace std; long long d, n; long long ans; void work() {
long long e = n + 1, s = n + 1; long long i = 1; ans = 0; while (s != 1 && s > i && i <= n) {
s = (d - 1) / i + 1; if (s < e) {
ans += (e - s) * i; e = s; } if (s > i) ans += s; i++; } printf("%lld\n", ans); } int main() {
//freopen("t.txt", "r", stdin); while (scanf("%lld%lld", &d, &n), n | d) // for (d = 1; d < 50; d++) // for (n = 1; n < 50; n++) {
work(); // long long ans1 = 0; // for (int i = 1; i <= n; i++) // ans1 += (d - 1) / i + 1; // if (ans1 != ans) // {
// cout << "al;skdjflasjdflkj" << endl; // cout << n << " " << d << endl; // } // printf("%lld\n", ans1); } return 0; }

转载地址:http://hcfxa.baihongyu.com/

你可能感兴趣的文章
Java回调函数使用和剖析
查看>>
软件测试中的心理学效应
查看>>
OpenStack云计算实战手册(第2版)
查看>>
iOS Survey
查看>>
select 和 epoll 多路复用IO
查看>>
php使用json_decode返回NULL
查看>>
LEXUS OPENCART 自适应主题模板 ABC-0019-01 HIGHLIGHTED FEA
查看>>
linux下mysql集群搭建
查看>>
理解Linux中Load_average负载
查看>>
SVN更改文件的可执行权限属性
查看>>
腾讯云 ssl 证书(免费)申请
查看>>
Undo日志
查看>>
并发编程基础四--同步代码块,同步方法,lock,死锁
查看>>
HTTP
查看>>
springmvc 资料
查看>>
Java并发编程之synchronized同步锁锁的是谁
查看>>
linux下配置安装mongodb
查看>>
用Nagios监控OSSIM中MySQL数据库
查看>>
list集合中除去重复的值
查看>>
php中PDO处理mysql 基本操作
查看>>