数论分块板子

 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 }

 

posted @ 2020-08-19 14:30  JamZF  阅读(154)  评论(0)    收藏  举报