P2261 [CQOI2007]餘數求和

 

題目描述

給出正整數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=29c++

輸入輸出格式

輸入格式:app

 

兩個整數n kasync

 

輸出格式:spa

 

答案.net

 

輸入輸出樣例

輸入樣例#1: 
10 5
輸出樣例#1: 
29

說明

30%: n,k <= 1000blog

60%: n,k <= 10^6get

100% n,k <= 10^9博客

 

題解:

詳細題解見這個博客,it

找到約 1,010,000 條結果 (用時 0.37 秒) 
 
 
 
 
 
 

https://blog.csdn.net/nuclearsubmarines/article/details/78165951

#include <bits/stdc++.h>
using namespace std;
#define ll long long
int main()
{
    ll n,k;
    scanf("%lld%lld",&n,&k);
    ll ans=n*k;
    for (ll i = 1,r; i <=n ; i=r+1) {
        if(k/i!=0) r=min((k/(k/i)),n);   //k>i  在必定區間內k/i的值是相同的 在此處計算出這一塊的右區間 [i,r] 左閉右閉
        else  r=n;                       // 否者就全是0
        ans-=(r-i+1)*(k/i)*(i+r)/2;      //塊大小*塊內的值*i/2
    }
    printf("%lld\n",ans);
    return 0;
}
相關文章
相關標籤/搜索