题目描述
给出正整数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
输出格式:
答案
输入输出样例
说明
30%: n,k <= 1000
60%: n,k <= 10^6
100% n,k <= 10^9
代码:
1 #include"bits/stdc++.h" 2 #define db double 3 #define ll long long 4 #define vec vector<ll> 5 #define Mt vector<vec> 6 #define ci(x) scanf("%d",&x) 7 #define cd(x) scanf("%lf",&x) 8 #define cl(x) scanf("%lld",&x) 9 #define pi(x) printf("%d ",x) 10 #define pd(x) printf("%f ",x) 11 #define pl(x) printf("%lld ",x) 12 //#define rep(i, x, y) for(int i=x;i<=y;i++) 13 #define rep(i,n) for(int i=0;i<n;i++) 14 const int N = 1e5+5; 15 const int mod = 1e9 + 7; 16 const int MOD = mod - 1; 17 const int inf = 0x3f3f3f3f; 18 const db PI = acos(-1.0); 19 const db eps = 1e-10; 20 using namespace std; 21 ll n,k; 22 ll f[N]; 23 int main() 24 { 25 cl(n),cl(k); 26 ll ans=n*k; 27 for(ll i=1,j;i<=n;i=j+1){ 28 if(!(k/i)) j=n; 29 else j=min(k/(k/i),n); 30 ans-=(k/i)*(j-i+1)*(j+i)/2; 31 } 32 pl(ans); 33 return 0; 34 }