您的位置:首页 > 其它

【技♂巧】bzoj1257余数之和

2015-11-26 15:36 183 查看
题目链接: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

代码:

[code]#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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: