本题考查找规律,类似此类问题建议寻找周期序列来理清自己的逻辑。
注意两条性质:

  • 余数呈周期性变化,当除数为y时,余数从0到y-1,周期性变化,周期为y,注意第一个0不存在。周期性变化是1,。。。,y-1,0
  • 除数为y,则余数小于y,而余数>=k,所以除数>k

思路:设除数为y:k+1 -> n,完整周期个数为n/y,每个周期内满足的被除数是y-k个;最后一个不完整周期是1 到 n%y,个数是n%y-k+1,
两种情况并不相同,是因为 0 出现在周期序列的最后一个元素,当k=0时,也是由于此,数量为n%y;

import java.util.Scanner;

public class Main {
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        while (sc.hasNext()) {
            long cnt = 0L;
            long n = sc.nextInt();
            long k = sc.nextInt();
            for(long y = k + 1; y <= n; y++){
                int res = 0;
                res = (int) (n / y * (y - k));
                if(n % y >= k)
                    if(k != 0)
                        res += n % y - k + 1;
                    else res += n % y;
                cnt += res;
            }
            System.out.println(cnt);
        }
    }
}