说实话,如果不靠猜,这题需要想很久,但是因为复杂度关系,总是会忘a的幂次上想,就能蒙对。
下面看一下我怎么理清这题关系的。
首先,题目告诉我们一个数是由1而来的。同时有一个乘数mul,一个加数add。
我们首先瞎写一个式子。比如((mul*(1+add)+add)*mul +add)*mul
看起来很复杂,我们对其进行化简。
mul*mul*mul + mul*mul*mul*add + add*mul*mul + add*mul
答案就在上面这个式子里。
我们可以看到无论是怎样复杂的式子,由于任何数都是来自1,所以必有恰好一项是没有乘add
的,我们把这项去除吗,那么要么就是不剩任何项,要么就是乘了add
的。
//
// Created by SANZONG on 2021/7/14.
//
#include "bits/stdc++.h"
#define int long long
using namespace std;
//int a[40000];
signed main() {
int T;
cin >> T;
while (T--)
{
int n,a,b;
cin >> n >> a >> b;
if (a == 1 || b == 1)
{
if ((n - 1) % b == 0) cout << "Yes" << endl;
else
cout << "No" << endl;
} else{
int t = 1;
while (t <= n)
{
if ((n - t) % b == 0) {
cout << "Yes" << endl;
break;
}
t *= a;
}
if ( t > n) cout << "No" << endl;
}
}
}