arc102a

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;
}
原文地址:https://www.cnblogs.com/ullio/p/13996758.html