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 Kotlin (1.0.0) (judge verdict: Accepted)


import java.math.BigInteger

fun ac104(args: Array<String>) {
    val (N, K) = args[0].split(" ").map { it.toLong() }
    var ans :BigInteger = BigInteger.ZERO

    ans += (1..3).map { BigInteger.valueOf(N / K) }.reduce { acc, num -> acc * num }

    if (K % 2 == 0L) {
        val tmp = BigInteger.valueOf((1..N).filter { it % K == K/2 }.size.toLong())
        ans += (1..3).map { tmp }.reduce { acc, num -> acc * num }
    }

    println(ans)
}

fun main(args: Array<String>) {
    ac104(readLineList())
}

fun readLineList(): Array<String> {
    val lineList = mutableListOf<String>()
    while (true) {
        val line = readLine()
        if (line.isNullOrBlank()) {
            break
        } else {
            lineList.add(line!!)
        }
    }
    return lineList.toTypedArray()
}