51Nod1225餘數之和

2021-10-03 19:14:22 字數 1275 閱讀 7375

題目鏈結

題意:f(n) = (n % 1) + (n % 2) + (n % 3) + … (n % n)。其中%表示mod,也就是餘數。

例如f(6) = 6 % 1 + 6 % 2 + 6 % 3 + 6 % 4 + 6 % 5 + 6 % 6 = 0 + 0 + 0 + 2 + 1 + 0 = 3。

給出n,計算f(n), 由於結果很大,輸出mod 1000000007的結果即可。

輸入:輸入1個數n(2 <= n <= 10^12)。

輸出:輸出f(n) mod 1000000007的結果。

題解:f(n

)=∑1

nn%i

f(n)=\sum_^n\%i

f(n)=∑

1n​n

%i等價於

f (n

)=∑1

nn−⌊

ni⌋∗

if(n)=\sum_^n-\lfloor\frac\rfloor*i

f(n)=∑

1n​n

−⌊in

​⌋∗i

因此,f(n

)=n2

−∑1n

⌊ni⌋

∗i

f(n)=n^2-\sum_^\lfloor\frac\rfloor*i

f(n)=n

2−∑1

n​⌊i

n​⌋∗

i前一部分可以直接算出,後一部分可以用分塊的做法算出,時間複雜度為o(n

)o(\sqrt)

o(n​

)

#include

using

namespace std;

#define ll long long

#define inf 0x3f3f3f3f

#define mes(a, val) memset(a, val, sizeof a)

#define mec(b, a) memcpy(b, a, sizeof a)

const ll mod =

1000000007

;ll inv2;

ll ksm

(ll a, ll n, ll mod)

return res;

}ll mod

(ll n)

ll getsum

(ll l, ll r)

ll solve

(ll n)

return

mod(ans);}

intmain()

51Nod 1225 餘數之和

acm模版 對於數論只會打表找規律的我來說,我一上來就打了一張表,然後發掘其中的規律 沒法子,腦子跟不上,推不出來規律,只能找規律。通過這個表我們可以發現 從第100項到51項是等差數列0 49,base 1 從第50項到34項是等差數列0 32,base 2 從第33項到26項是等差數列1 22,...

51 Nod 1225 餘數之和

基準時間限制 1 秒 空間限制 131072 kb 分值 80 難度 5級演算法題 f n n 1 n 2 n 3 n n 其中 表示mod,也就是餘數。例如f 6 6 1 6 2 6 3 6 4 6 5 6 6 0 0 0 2 1 0 3。給出n,計算f n 由於結果很大,輸出mod 100000...

51nod1225 餘數之和

打表可以看出規律。分塊求就可以了。include include include includeusing namespace std define ll long long ll read const ll mod 1e9 7 const ll tt 5e8 4 int main printf l...