【技♂巧】bzoj1257余数之和

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/FAreStorm/article/details/50056623

题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1257
题目大意:

这里写图片描述

最近在学数论这种东西……

分析可得:
这里写图片描述

然后呢?
对于N>K的部分,K mod i等于K
剩下的部分,由于K/i是向下取整的,所以K/i的值共有sqrt(k)种,分别是1,2,3,4……k
然后可以把k/i相同的项提取出来,剩下的sum=(l)+(l+1)+(l+2)+(l+3)……+(r-1)+(r),由于是个等差数列可以直接得出公式sum=(r-l+1)l+(r-l+1)(r-l)/2

代码:

#include <iostream>
#define ll long long
using namespace std;
int main()
{
    ll n,k,ans = 0;
    cin >> n >> k;
    if(n >= k)
    {
        ans = k * (n-k);
        n = k-1;
    }
    for(ll i = 1;i <= n;i ++)
    {
        ll lst = k/(k/i);
        if(lst > n)
            lst = n;
        ans += k*(lst-i+1) - (k/i)*(lst+i)*(lst-i+1)/2;
        i = lst;
    }
    cout << ans << endl;
    return 0;
}
展开阅读全文

没有更多推荐了,返回首页