1 solutions
-
0
$\sum_{i=1}^nk\ mod\ i=n \times k-\sum_{i=1}^n⌊k/i⌋*i$
⌊k/i⌋ 最多只有2个值
分段讨论: 当i<= 时,因为是1到 的整数,所以最多只有 个不同的值。
当> 时,<= 下,又因为式子取整了,所以式子只能取1 到 的整数,故最多也只有 个不同的⌊k/i⌋值。 综上所述,最多只有 2月个取值
假设我们知道一段相同取值的下界是 ,若能求出上界,我们问题便解决了。
若下界是 ,上界是 ps:证明稍微有点麻烦可以自己研究下
#include<bits/stdc++.h> using namespace std; typedef long long LL; int main() { LL n,k; cin>>n>>k; LL ans=n*k; for(int i=1;i<=n;) { LL x=k/i; //计算i的贡献的次数 if(x==0) break; //后面都没有贡献了 LL y=min(k/x,n); //计算当前k/i=x的最远的点 ans-=x*(i+y)*(y-i+1)/2; // 计算这段的和 i=y+1; //跳到下一个区间 } cout<<ans; return 0; }
- 1
Information
- ID
- 2128
- Time
- 1000ms
- Memory
- 256MiB
- Difficulty
- 10
- Tags
- # Submissions
- 1
- Accepted
- 1
- Uploaded By