arc102a
大意
给定 (N,K) ,求满足 (Kmid a+b ; Kmid b+c ; Kmid a+c) 且 (a,b,cleq N) 的三元组 ((a,b,c)) 的个数。
所有数都为正整数。
思路
显然,当三元组 ((a,b,c)) 为一组解, ((a+xK,b+yK,c+zK)) 也为一组解。
实际上,若 (a,b,c) 都为正整数,且 ((a+xK,b+yK,c+zK)) 为一组解,则 ((a,b,c)) 也一定为一组解。
将式子代入条件容易得到。
所以只需要找出所有小于等于 (K) 的解,其他的通过组合递推就能得到。
等于 (K) 时,显然成立。
小于 (K) 时,显然要有 (a+b=b+c=c+a=K)
此时若 (K) 是奇数显然无解,当 (K) 是偶数时,能得到一组解 ((dfrac{K}{2},dfrac{K}{2},dfrac{K}{2}))
从小于等于 (K) 的解出发考虑,因为 (a,b,c) 的值在加 (K) 的过程中互不影响,所以运用乘法原理即可。
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cmath>
using namespace std;
#define ll long long
#define ull unsigned long long
#define cint const int&
#define Pi acos(-1)
ull n, k;
ll p(ll x) {return x*x*x;}
int main() {
cin >> n >> k;
if(k%2) {
cout << p(n/k);
} else {
cout << p(n/k) + p((n/(k>>1)+1)>>1);
}
return 0;
}