[BZOJ1257][CQOI2007]余数之和sum(数论)

题目描述

传送门

题解

i=1nKmodi

=i=1nKKii

=nKi=1nKii

咦有点眼熟
和约数研究那道题有点像,在求和的时候运用一下等差数列的求和公式即可。
我太煞笔了看了半天不懂什么意思,原来那是等差数列的求和公式,还百度一下如何推导。。。

代码

#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
#define LL long long
LL n,k,ans;
int main(){
    scanf("%lld%lld",&n,&k);
    ans=n*k;
    if (n>k) n=k;
    LL j=0;
    for(int i=1;i<=n;i=j+1){
        j=min(n,k/(k/i));
        ans-=(k/i)*(j-i+1)*(i+j)/2;
    }
    printf("%lld\n",ans);
}

你可能感兴趣的:(数论,bzoj,CQOI)