B. Plus and Multiply
题目传送门:
题面:
题目大意:
就是一个无限序列,初始元素是1,操作是不断地把当前结果*a或者+b,给你一个数字n,问可不可以由当前序列属性得到。
思路:
关键代码:
ll sum = 1;
while (sum <= n) {
if ((n - sum) % b == 0) {
cout << “Yes” << endl;
f = 1;
break;
}
sum *= a;
}
代码:
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int main() {
ios::sync_with_stdio(false);
cin.tie(0), cout.tie(0);
int T;
cin >> T;
while (T--) {
bool f = 0;
ll n, a, b;
cin >> n >> a >> b;
if ((n - 1) % b == 0) {
cout << "Yes" << '\n';
continue;
}
if (a == 1) {
cout << "No" << "\n";
continue;
}
if (b == 1) {
cout << "Yes" << '\n';
continue;
}
ll sum = 1;
while (sum <= n) {
if ((n - sum) % b == 0) {
cout << "Yes" << endl;
f = 1;
break;
}
sum *= a;
}
if (!f) cout << "No" << '\n';
}
}