题解:AT_abc397_d [ABC397D] Cubes
题目简述
给定正整数
主要思路
数学题。
设正整数
得到方程:
再得到:
此时使用判别式为:
那么
为了使
接下来就可以开始枚举
-
- 判断
\Delta 是否为非负的完全平方数。 - 判断
y 是否为正整数。
以上条件都满足,则称为找到了一组
如果枚举完所有的 -1。
注:这种写法本题会炸 long long,但开 unsigned long long 即可。
AC Code
#include<cmath>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
typedef long double db;
typedef unsigned long long ll;
const int INT_INF = 0x3f3f3f3f;
const ll LL_INF = 0x3f3f3f3f3f3f3f3f;
// ----------------------------
// ----------------------------
// ----------------------------
int main() {
ll n; cin >> n;
// ----------------------------
ll d, s, y, x;
for (ll z = 1; z * z * z <= n * 4; z++) {
if (n % z != 0) continue;
d = -3 * z * z + 12 * (n / z);
if (d < 0) continue;
s = sqrt(d);
if (s * s != d) continue;
y = (-3 * z + s) / 6;
if (y <= 0) continue;
x = y + z;
cout << x << ' ' << y;
return 0;
}
// ----------------------------
cout << -1;
return 0;
}