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# (Mono 4.6.2.0) (judge verdict: Wrong Answer)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Atcoder
{
    class Program
    {
        static void Main(string[] args)
        {
            //    var data = Array.ConvertAll(Console.ReadLine().Split(), int.Parse);
            //    var t = data[0];
            //    var s = data[1];
            //    int[,] friens = new int[t, t];
            //    int tomo = 0;

            //    for (int i = 0; i < s; i++)
            //    {
            //        var friend = Array.ConvertAll(Console.ReadLine().Split(), int.Parse);
            //        friens[friend[0] - 1, friend[1] - 1] = 1;
            //        friens[friend[1] - 1, friend[0] - 1] = 1;

            //    }

            //    for (int i = 0; i < t; i++)
            //    {
            //        var x = new List<int>();
            //        var y = new List<int>();
            //        var a = new List<int>();

            //        for (int j = 0; j < t; j++)
            //        {

            //            if (friens[i, j] == 1)
            //            {
            //                x.Add(j);
            //            }

            //        }

            //        foreach (var z in x)
            //        {
            //            for (int l = 0; l < t; l++)
            //            {
            //                if (friens[z, l] == 1)
            //                {
            //                    y.Add(l);
            //                }
            //            }

            //            foreach (var m in y)
            //            {
            //                if (m != i && friens[m, i] != 1)
            //                {
            //                    a.Add(m);
            //                }
            //            }
            //        }

            //        Console.WriteLine(a.Distinct().Count());

            //    }

            //    var a = Array.ConvertAll(Console.ReadLine().Split(), int.Parse);
            //    var b = a[0];
            //    var c = a[1];
            //    int[] d = new int[b];
            //    int[] e = new int[b];
            //    int[] f = new int[b];
            //    int tmp = 0;
            //    int tokuten = 0;

            //    for (int i = 0; i < b; i++)
            //    {
            //        var g = Array.ConvertAll(Console.ReadLine().Split(), int.Parse);
            //        d[i] = g[0];
            //        e[i] = g[1];
            //        f[i] = g[2];

            //    }

            //    for (int j = 1; j <= c; j++)
            //    {
            //        for (int k = 0; k < b; k++)
            //        {
            //            if (d[k] <= j && e[k] >= j)
            //            {

            //            }
            //            else
            //            {
            //                tmp += f[k];
            //            }

            //        }
            //        tokuten = Math.Max(tokuten ,tmp);
            //        tmp = 0;
            //    }

            //    Console.WriteLine(tokuten);

            //var a = int.Parse(Console.ReadLine());
            //var b = Array.ConvertAll(Console.ReadLine().Split(), int.Parse);
            //Dictionary<int,int> c = new Dictionary<int,int>();
            //int d = 0;

            //int cnt = 0;

            ////for (int i = 0; i < a; i++)
            ////{
            ////    c.Add(b[i], 1);
            ////}

            //for (int i = 0; i < a; i++)
            //{
            //    d = b[i];

            //    while (d % 2 == 0)
            //    {
            //        d /= 2;
            //    }

            //    if (c.ContainsKey(d))
            //    {

            //    }
            //    else
            //    {
            //        c.Add(d, 1);
            //        cnt++;
            //    }
            //}
            //Console.WriteLine(cnt);

            //var one = Array.ConvertAll(Console.ReadLine().Split(),int.Parse);
            //var N = one[0];
            //var M = one[1];
            //List<int[]> ID= new List<int[]>();
            //List<string> Out = new List<string>();
            //int cnt = 1;
            //long now = -1;

            //for (int i = 0; i < M; i++)
            //{
            //    var morethanone = Array.ConvertAll(Console.ReadLine().Split(), int.Parse);
            //    ID.Add(morethanone);
            //}

            //var sortedID = ID.OrderBy(data => data[0]).ThenBy(data => data[1]);

            //var Rank = new Dictionary<string, int>();

            //foreach (var item in sortedID)
            //{

            //    if (now != -1 && item[0] != now)
            //    {
            //        cnt = 1;
            //    }

            //    now = item[0];
            //    Rank.Add(item[0].ToString() + item[1].ToString(), cnt);
            //    cnt++;
            //}

            //for (int i = 0; i < M; i++)
            //{
            //    var tmp = ID[i];
            //    string key = tmp[0].ToString() + tmp[1].ToString();
            //    string Output = tmp[0].ToString().PadLeft(6, '0') + Rank[key].ToString().PadLeft(6, '0');
            //    Console.WriteLine(Output);

            //}

            //var N = int.Parse(Console.ReadLine());
            //List<int[]> Z = new List<int[]>();
            //List<int[]> dis = new List<int[]>();
            //int X = 0;
            //int Y = 0;
            //int H = 0;


            //for (int i = 0; i < N; i++)
            //{
            //    var line = Array.ConvertAll(Console.ReadLine().Split(), int.Parse);
            //    Z.Add(line);
            //}

            //row
            //for (int i = 0; i < N; i++)
            //{
            //    var linedata = Z[i];
            //    //height
            //    for (int j = 0; j < 201; j++)
            //    {
            //        //x
            //        for (int k = 0; k < 101; k++)
            //        {
            //            for (int l = 0; l < 101; l++)
            //            {
            //                if ((j + linedata[2]) - Math.Abs(k - linedata[0]) - Math.Abs(l - linedata[1]) == linedata[2])
            //                {
            //                    X = k;
            //                    Y = l;
            //                    H = j;
            //                    dis.Add(new {x = X,y =Y, h =H});
            //                }
            //            }
            //        }
            //    }
            //}
            //var a = dis.GroupBy(n => n)
            //var b = a.OrderByDescending(n => n.cnt);

            //var a = Console.ReadLine().ToCharArray();
            //var b = Console.ReadLine().ToCharArray();

            ////char[] c = new char[a.Count()];
            ////char[] d = new char[a.Count()];
            //var c = new Dictionary<char, char>();
            //var d = new Dictionary<char, char>();

            //for (int i = 0; i < a.Count(); i++)
            //{
            //    if (!c.ContainsKey(a[i]))
            //    {
            //        c.Add(a[i], b[i]);
            //    }
            //    else if (c[a[i]] != b[i])
            //    {
            //        Console.WriteLine("No");
            //        return;
            //    }
            //}

            //for (int i = 0; i < b.Count(); i++)
            //{
            //    if (!d.ContainsKey(b[i]))
            //    {
            //        d.Add(b[i], a[i]);
            //    }
            //    else if (d[b[i]] != a[i])
            //    {
            //        Console.WriteLine("No");
            //        return;
            //    }
            //}
            //Console.WriteLine("Yes");

            //var line1 = Array.ConvertAll(Console.ReadLine().Split(), int.Parse);
            //var line2 = Array.ConvertAll(Console.ReadLine().Split(), int.Parse);
            //int min = int.MaxValue;
            //int min2 = int.MaxValue;
            //int amari = int.MaxValue;

            //for (int i = 0; i < line1[0]; i++)
            //{
            //    if (Math.Abs(line2[i]-line1[1]) <= min)
            //    {
            //        min2 = min;
            //        min = Math.Abs(line2[i] - line1[1]);
            //    }
            //    else if (Math.Abs(line2[i] - line1[1]) < min2)
            //    {
            //        min2 = Math.Abs(line2[i] - line1[1]);
            //    }
            //}

            //if (min2 != int.MaxValue)
            //{
            //    while (amari != 0)
            //    {
            //        amari = min2 % min;
            //        min2 = min;
            //        min = amari;
            //    }
            //    Console.WriteLine(min2);
            //}
            //else
            //{
            //    Console.WriteLine(min);
            //}


            var line1 = Array.ConvertAll(Console.ReadLine().Split(), int.Parse);
            int N = line1[0];
            int K = line1[1];

            int Kgaguu = 0;
            int amari0 = 0;


            for (int i = 1; i <= N; i++)
            {
                if (i % K == 0)
                {
                    amari0++;
                }
                else if (K % 2 == 0 && i % K == K /2)
                {
                    Kgaguu++;
                }
            }

            Console.WriteLine(amari0 * amari0 * amari0 + Kgaguu * Kgaguu * Kgaguu);

        }
    }
}