Problem:
Score : 300 points

Problem Statement

You are given integers N and K. Find the number of triples (a,b,c) of positive integers not greater than N such that a+b,b+c and c+a are all multiples of K.
The order of a,b,c does matter, and some of them can be the same.

Constraints

1 \leq N,K \leq 2\times 10^5

N and K are integers.

Input

Input is given from Standard Input in the following format:

N K

Output

Print the number of triples (a,b,c) of positive integers not greater than N such that a+b,b+c and c+a are all multiples of K.

Sample Input 1

3 2

Sample Output 1

9

(1,1,1),(1,1,3),(1,3,1),(1,3,3),(2,2,2),(3,1,1),(3,1,3),(3,3,1) and (3,3,3) satisfy the condition.

Sample Input 2

5 3

Sample Output 2

1

Sample Input 3

31415 9265

Sample Output 3

27

Sample Input 4

35897 932

Sample Output 4

114191

Solution in C (GCC 5.4.1) (judge verdict: Time Limit Exceeded)

#include <stdio.h>

int main() {
  long int N, K, count = 0, a, b, c, max_b, max, mx, min_b, min;
  scanf("%ld %ld", &N, &K);
  mx = 2 * N / K;
  max = mx * K;
  for (a = N; a > 0; a--) {
    max_b = max - a;
    for (; max_b > N; max_b -= K)
      ;
    for (min = a / K; min * K <= a && min <= mx; min++)
      ;
    min_b = min * K - a;
    if (min_b < 1) {
      continue;
    }
    for (b = max_b; b >= min_b; b -= K) {
      for (c = max_b; c >= min_b; c -= K) {
        if ((b + c) % K == 0) {
          // printf("%ld %ld %ld\n", a, b, c);
          count++;
        }
      }
    }
  }

  // printf("\n%ld\n", count);
  printf("%ld\n", count);
  return 0;
}