[CQOI2007]余数求和

【代码】

#include<bits/stdc++.h>

#define LL long long

using namespace std;

int main() {
    LL n, k, t, ans;
    #define LL long long
    scanf("%lld%lld", &n, &k);
    ans = (LL) n * k;
    for(LL l = 1,r; l <= n;l = r + 1) {
        r = (t = k / l) ? min(k / t, n) : n;
        ans = (ans - (r - l + 1) * t * (l + r) / 2);
    }
    printf("%lld\n", ans);
    return 0;
}

原文地址:https://www.cnblogs.com/kcfzyhq/p/8665622.html

时间: 2024-10-07 20:12:23

[CQOI2007]余数求和的相关文章

[Luogu 2261] CQOI2007 余数求和

[Luogu 2261] CQOI2007 余数求和 <题目链接> 这一定是我迄今为止见过最短小精悍的省选题了,核心代码 \(4\) 行,总代码 \(12\) 行,堪比小凯的疑惑啊. 这题一看暴力很好打,然而 \(10^{9}\) 的范围注定会卡掉暴力. 所以我们要用除法分块来优化. 由题意得:\(ans = \sum_{i=1}^{n} k \bmod i\) 我们知道,\(a \bmod b = a - b \times \lfloor \frac{a}{b} \rfloor\) 因此,\

题解 P2261 【[CQOI2007]余数求和】

题目链接 Solution [CQOI2007]余数求和 题目大意:给定\(n,k\),求\(\sum_{i = 1}^{n}k \bmod i\) 解析:我们考虑大力化柿子 \[\sum_{i = 1}^{n}k \bmod i\] \[=\sum_{i = 1}^{n}k-i \times \lfloor \frac{k}{i} \rfloor\] \[=nk-\sum_{i = 1}^{n}i \times\lfloor \frac{k}{i} \rfloor\] 然后我们发现右边\(\s

P2261 [CQOI2007]余数求和

题目背景 数学题,无背景 题目描述 给出正整数n和k,计算G(n, k)=k mod 1 + k mod 2 + k mod 3 + … + k mod n的值,其中k mod i表示k除以i的余数.例如G(10, 5)=5 mod 1 + 5 mod 2 + 5 mod 3 + 5 mod 4 + 5 mod 5 …… + 5 mod 10=0+1+2+1+0+5+5+5+5+5=29 输入输出格式 输入格式: 两个整数n k 输出格式: 答案 输入输出样例 输入样例#1: 10 5 输出样例

【洛谷P2261】[CQOI2007]余数求和

题目背景 数学题,无背景 题目描述 给出正整数n和k,计算G(n, k)=k mod 1 + k mod 2 + k mod 3 + - + k mod n的值,其中k mod i表示k除以i的余数.例如G(10, 5)=5 mod 1 + 5 mod 2 + 5 mod 3 + 5 mod 4 + 5 mod 5 -- + 5 mod 10=0+1+2+1+0+5+5+5+5+5=29 输入输出格式 输入格式: 两个整数n k 输出格式: 答案 输入输出样例 输入样例#1: 10 5 输出样例

【题解】CQOI2007余数求和

大家都说这题水然而我好像还是调了有一会儿--不过暴力真的很良心,裸的暴力竟然还有60分. 打一张表出来,就会发现数据好像哪里有规律的样子,再仔细看一看,就会发现k/3~k/2为公差为2的等差数列,k/2~之后为公差为1的等差数列,于是我们就可以利用高斯求和快速求解啦.自认为代码是能够看得的... #include <bits/stdc++.h> using namespace std; #define LL long long #define int long long LL ans; int

Luogu2261 [CQOI2007]余数求和

题目蓝链 Description 定义函数\(G(n, k) = \sum\limits_{i = 1}^{n} k~mod~i\),给定\(n, k\),求函数\(G\)的值 \(n, k \leq 10^9\) Solution 我一开始看这题的时候居然还懵了一下 因为当\(i > k\)时,余数一定都是\(k\),所以我们只需要考虑\(i \leq k\)的部分怎么求 我们可以把\(k\)表示成\(a \cdot i + b\)的形式,我们发现\(k\)分别整除\([1, k]\)之间的数

Luogu P2261 [CQOI2007]余数求和

最近中考放假几天都在怼一道BJOI2018的水题,但卡死在90pts跑不动啊! 然后今天发现终于过了然而Hack的数据全RE了然后就开始找新的题目来找回信心. 然后发现智能推荐里有这道题,然后想了1min才想到CQOI到底是哪里的原来是重庆呵 其实还是一道比较好的除法分块的入门题.动一下脑子就可以做了. 我们先观察一下最基础的式子: \(\sum_{i=1}^n k\ mod\ i\) 然后我们利用取余的基本性质,即\(k\ mod\ i=k-i\lfloor\frac{k}{i}\rfloor

[CQOI2007]余数求和-整除分块

题目 题目 题目大意: 给出正整数\(n,k\),求\(\Sigma_{i=1}^{n}{k \bmod i}\) 代码 乍一看只能暴力,其实稍微修改下就变成了数论分块. \(\Sigma_{i=1}^{n}{k \bmod i}=\Sigma_{i=1}^{n}{\lfloor{\frac{k}{i}}\rfloor} \times i\) 然后就比一般的整除分块只是多了一个i,套板子就行了. #include <iostream> using namespace std; typedef

BZOJ 1257: [CQOI2007]余数之和sum【神奇的做法,思维题】

1257: [CQOI2007]余数之和sum Time Limit: 5 Sec  Memory Limit: 162 MBSubmit: 4474  Solved: 2083[Submit][Status][Discuss] Description 给出正整数n和k,计算j(n, k)=k mod 1 + k mod 2 + k mod 3 + … + k mod n的值,其中k mod i表示k除以i的余数.例如j(5, 3)=3 mod 1 + 3 mod 2 + 3 mod 3 + 3