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: Accepted)

#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<string.h>
/*
n以下でa,b,cがa+b,a+c,c+bがkの倍数->二倍はkの倍数になってるはず
二倍がkの倍数でもa+bがの倍数かは知らん
二倍がkの倍数になっている数字の集合を求める
2a = nk
kが奇数aはkの定数倍
k偶数
2a = nk
k/2の定数倍が候補
全部k/2はおっけい
*/
int main(void){
    long long n,k,val,ans;
    scanf("%lld %lld",&n,&k);
    if(k%2==1){
        val = n/k;
        if(val==1){
            printf("1\n");
        }else if(val == 2){ 
            printf("8\n");
        }else if(val == 0){
            printf("0\n");
        }else{
            ans = val*(val-1)*(val-2)+3*val*(val-1) + val;
            printf("%lld\n",ans);
        }
    }else{
        long long ans1,ans2;
        val = n/(k/2);
        long long val1,val2;
        if(val%2==1){
            val1 = val/2 + 1;
            val2 = val/2;
        }else{
            val1 = val/2;
            val2 = val/2;
        }
        if(val1==1){
            ans1 = 1;
        }else if(val1 == 2){ 
            ans1 = 8;
        }else if(val1 == 0){
            ans1 = 0;
        }
        else{
            ans1 = val1*(val1-1)*(val1-2)+3*val1*(val1-1) + val1;
        }
        if(val2==1){
            ans2 = 1;
        }else if(val2 == 2){ 
            ans2 = 8;
        }
        else if(val2 == 0){
            ans2 = 0;
        }
        else{
            ans2 = val2*(val2-1)*(val2-2)+3*val2*(val2-1) + val2;
        }
        printf("%lld\n",ans1+ans2);
    }

    return 0;
}