题解 AT5404 [ABC166D] 【I hate Factorization】
题意
已知
给定
思路
直接枚举肯定超时,所以可以考虑缩小枚举范围。
#include <bits/stdc++.h>
using namespace std;
int main() {
int a = 1;
while(1) {
a++;
if (a * a * a * a * a - (a - 1) * (a - 1) * (a - 1) * (a - 1) * (a - 1) > 1e9) {
cout << a << endl;
return 0;
}
}
return 0;
}
通过以上程序可以得出
然后枚举即可。得到一组解就结束。
代码
#include <bits/stdc++.h>
using namespace std;
#define int long long //注意五次方有可能超过 int
int x;
int qp(int b, int p) { //快速幂
int ans = 1, base = b;
while(p > 0) {
if (p % 2 == 1) ans *= base;
base *= base;
p >>= 1;
}
return ans;
}
signed main() {
cin >> x;
for(int i = -120; i <= 120; ++i) {
for(int j = -120; j <= 120; ++j) {
if (qp(i, 5) - qp(j, 5) == x) {
cout << i << " " << j << endl;
return 0;
}
}
}
return 0;
}