1 long long ans = n * k; 2 for (long long l = 1, r; l <= n; 3 l = r + 1) { //此处l意同i,r意同j,下个计算区间的l应为上个区间的r+1 4 if (k / l != 0) 5 r = min(k / (k / l), n); 6 else 7 r = n; // l大于k时 8 ans -= (k / l) * (r - l + 1) * (l + r) / 9 2; //这个区间内k/i均相等,对i求和是等差数列求和 10 }