本文主要是介绍CQOI余数之和,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
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<=1000 100%的数据满足: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时容易出错
这篇关于CQOI余数之和的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!