Problem:
Score : 400 points

Problem Statement

Takahashi had a pair of two positive integers not exceeding N, (a,b), which he has forgotten.
He remembers that the remainder of a divided by b was greater than or equal to K.
Find the number of possible pairs that he may have had.

Constraints

1 \leq N \leq 10^5

0 \leq K \leq N-1

All input values are integers.

Input

Input is given from Standard Input in the following format:

N K

Output

Print the number of possible pairs that he may have had.

Sample Input 1

5 2

Sample Output 1

7

There are seven possible pairs: (2,3),(5,3),(2,4),(3,4),(2,5),(3,5) and (4,5).

Sample Input 2

10 0

Sample Output 2

100

Sample Input 3

31415 9265

Sample Output 3

287927211

Solution in C (GCC 5.4.1) (judge verdict: Accepted)

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <stdint.h> // uint64_t

#define max(a,b) ((a) > (b) ? (a) : (b))
#define min(a,b) ((a) > (b) ? (b) : (a))

int get_int(void) {
  int num;
  scanf("%d", &num);
  return num;
}

int get_int2(int *a1, int *a2) {
  scanf("%d %d", a1, a2);
  return 0;
}

int main(void) {
    int num, rem;
    get_int2(&num, &rem);
    int64_t ans = 0;
    if(rem==0) {
        ans = (int64_t)num*num;
        goto finish;
    }

    int b;
    for(b = rem+1; b <= num; b++) {
        // b+rem, b+rem+1, ...b+(b-1)
        int res = num/b;
        int re = num%b;
        int cnt = (re-rem+1);
        if(cnt <= 0) cnt = 0;
#ifdef DEBUG
        printf("%d: %d\n", b, res*(b-rem)+cnt);
#endif
        ans += (int64_t)res * (b-rem) + cnt;
    }
finish:
    printf("%lld\n", ans);
    return 0;
}