(整數分塊變形)牛客程式設計巔峰賽S2第1場 - 鑽石&王者 C-牛牛算題
阿新 • • 發佈:2020-11-22
題目連結:https://ac.nowcoder.com/acm/contest/9005/C
整數分塊
列舉p(也就是每一個分塊的七點,l),num/(num/l)(也就是每一個分塊裡面的終點,r)
比如num=20的時候
1*20+0 2*10+0 3*6+2 4*5+0 5*4+0 6*3+2 7*2+6 //r=7 8*2+4 // 9*2+2 // 10*2+0 //r=20/(20/7) = 10
11*1+9 //l=11 12*1+8 ... 18*1+2 19*1+2 20*1+0 //r = 20/(20/11) = 20
classSolution { public: /** * 程式碼中的類名、方法名、引數名已經指定,請勿修改,直接返回方法規定的值即可 * 返回1-n的所有k*m的和 * @param num long長整型 正整數 n * @return long長整型 */ long long cowModCount(long long num) { // write code here long long ans = 0, mod = 1e9+7; for(long long l = 1, r;l <= num;l=r+1) { r = num/(num/l); ans = (ans + (r-l+1)*(num/l)*num%mod - (r-l+1)*(l+r)/2*(num/l)%mod*(num/l)%mod+mod)%mod; } return ans; } };