题目链接: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
class Solution { 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; } };