bzoj 1257(数学)

来源:互联网 发布:淘宝达人导购网 编辑:程序博客网 时间:2024/05/21 10:30

Description

给出正整数n和k,计算j(n, k)=k mod 1 + k mod 2 + k mod 3 + … + k mod n的值,其中k mod i表示k除以i的余数。例如j(5, 3)=3 mod 1 + 3 mod 2 + 3 mod 3 + 3 mod 4 + 3 mod 5=0+1+0+3+3=7

Input

输入仅一行,包含两个整数n, k。

Output

输出仅一行,即j(n, k)。

Sample Input

5 3

Sample Output

7

HINT

50%的数据满足:1<=n, k<=1000 100%的数据满足:1<=n ,k<=10^9

#include<cstdio>#include<cstring>#include<iostream>#include<cmath>using namespace std;int n,k;int main(){scanf("%d%d",&n,&k);long long ans=0;if(n>k){ans=(long long)(n-k)*k;n=k;}int r;for(int i=1;i<=n;i=r+1){int t=k/i;r=k/t;if(r>=n)r=n;ans+=(long long)(r-i+1)*k-(long long)(r-i+1)*(i+r)/2*t;}cout<<ans;return 0;}


0 0
原创粉丝点击