CQOI余数之和
给出正整数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
输入格式:
输入仅一行,包含两个整数n, k。
输出格式:
输出仅一行,即j(n, k)。
样例输入:
5 3
样例输出:
7
数据范围:
50%的数据满足:1<=n, k<=1000100%的数据满足:1<=n ,k<=109
时间限制:
1000
空间限制:
512000#include<bits/stdc++.h>using namespace std;long long n,k;long long ans;int main(){ cin>>n>>k; if(n>k) { ans+=(n-k)*k; n=k; } for(int i=1;i<=n;i++) { if(i==n) { ans+=k%i;continue; } long long pd=k/i;long long pd1=k/(i+1); if(pd!=pd1)
ans+=k%i; else { long long ll=k/pd;long long r=k-pd*ll,l=k-i*pd; ans+=(l+r)*(ll-i+1)/2; i=ll; } } cout<<ans;}
min用longlong和int两个min时容易出错
6113

被折叠的 条评论
为什么被折叠?



