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

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

题意:给出n,k,求k%1 + k%2 + …… + k%n;

分析:当k/i = 1 时, k%i = k - i,随着i不断减小1,k-i每次减小1,即k%i每次减小1。当k/i=2时,i减小1,k%i减小2。我们要求k%i的和,可以划分为许多等差数列的和。

ContractedBlock.gif
ExpandedBlockStart.gif
View Code
#include 
#include
#include
#include
using namespace std; long long n, k; int main() {
//freopen("t.txt", "r", stdin); while (scanf("%lld%lld", &n, &k) != EOF) {
long long ans = 0; if (n > k) ans = k * (n - k); int i = 1; long long a, b; while (true) {
a = k / i; b = k / (i + 1) + 1; if (a == b) break; if (b > n) {
i++; continue; } if (a > n) a = n; ans += (k % a + k % a + (a - b) * i) * (a - b + 1) / 2; i++; } for (i = 1; i <= min(n, a); i++) ans += k % i; printf("%lld\n", ans); } return 0; }

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

你可能感兴趣的文章
Java(第十五章)
查看>>
Android--静默安装
查看>>
生命有尽,大道无涯
查看>>
JavaScript实现省市二级联动
查看>>
IOS Unit test
查看>>
HttpClient 学习整理[转]
查看>>
2019-05-21 Java学习日记之String类型Demo
查看>>
PHP将两个二维数组合并为一个二维数组的方法
查看>>
再见,2014;你好2015
查看>>
mysql 导入导出.sql文件
查看>>
NIO - Selector源码分析
查看>>
×××S 2012 聚合函数 -- 介绍
查看>>
linux 防火墙 iptables 允许 某个 某段 IP访问 某个端口
查看>>
Open*** 安装脚本
查看>>
计算任意两个数之间1出现的次数的思维过程
查看>>
Error No matching provisioning profiles found
查看>>
windows 2008创建群集“xxx”时出错。由于超时时间已过,该操作返回
查看>>
WinForm 入口Main方法
查看>>
SQL基础语句
查看>>
java算法2_二分查找法
查看>>