余数求和(luogu 2261)

题目背景

数学题,无背景

题目描述

给出正整数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

 

输出格式:

 

答案

 

输入输出样例

输入样例
10 5
输出样例
29

说明

30%: n,k <= 1000

60%: n,k <= 10^6

100% n,k <= 10^9


 

 

code

#include<stdio.h> 
#include<algorithm> 
using namespace std;
long long ans,n,k;

int main() 
{
    scanf("%lld%lld",&n,&k);
    ans=n*k;
    for(int x=1,gx ; x<=n ; x=gx+1) {
        gx=k/x ? min(k/(k/x),n) : n;
        ans-=(k/x)*(x+gx)*(gx-x+1)/2;
    }
    printf("%lld",ans);
    return 0;
}

 

posted @ 2018-10-12 17:24  qseer  阅读(233)  评论(0编辑  收藏  举报