传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=1257

最近刚做了一道莫比乌斯的题,需要用到这种方法。

应该让k / i相等的一连串k % i相加,举个例子:

100 / 34 = 2 ... 32

100 / 35 = 2 ... 30

100 / 36 = 2 ... 28

...

100 / 50 = 2 ... 0

可以观察到,商相同的余数数列是公差为商的相反数的等差数列,用求和公式就可以O(1)计算。

那么程序该怎么写呢?注意,如果当前的除数是i,那么[i, n / (n / i)]这个区间所有的数作为除数时,商都相同,那么之后就简单了。

#include <cstdio>
#include <algorithm> int n, k;
long long ans; int main(void) {
scanf("%d%d", &n, &k);
int last, lmt = std::min(n, k), d;
long long tem;
if (n > k) {
ans = (long long)k * (n - k);
}
for (int i = 1; i <= lmt; i = last + 1) {
d = k / i;
last = std::min(k / d, lmt);
tem = last - i + 1;
ans += tem * (k % i) - ((tem * (tem - 1)) >> 1) * d;
}
printf("%lld\n", ans);
return 0;
}

  

最新文章

  1. C#图片处理常见方法性能比较
  2. Debian7下初次尝试Nginx+Uwsgi部署Django开发环境
  3. C# Susan边缘检测(Susan Edge Detection)
  4. 新萝卜家园GHOST WIN7系统32,64位极速装机特别版
  5. NET下RabbitMQ实践[实战篇]
  6. analytics.js
  7. MySQL忘记了密码登录不进去,用命令符修改新的密码重新登录的方法
  8. 为什么Underscore
  9. SQL语句优化(转摘)
  10. CSS小tip整理
  11. nginx取结构体地址
  12. mysql经典面试题
  13. celery定时任务
  14. elementUI 设置input的只读或禁用
  15. Python -处理PDF
  16. python之旅六【第七篇】面向对象
  17. C和C++相互调用
  18. springboot项目文件上传(绝对路径)并使用tomcat虚拟路径进行图片预览
  19. gdb 调试(查看运行时数据) 四
  20. ASP.Net Core 2.2 MVC入门到基本使用系列 (四)

热门文章

  1. HttpClient 认证
  2. Robot Framework自己主动化測试框架之我见
  3. android支付
  4. springboot对传参的拦截统一处理
  5. MRP 中的数据元素
  6. gradle配置
  7. Memory cycles about Block
  8. kbmMW实现sql查询(图文并茂)
  9. js中的width问题
  10. POJ2135 Farm Tour —— 最小费用最大流