B. Plus and Multiply 构造分析

说实话,如果不靠猜,这题需要想很久,但是因为复杂度关系,总是会忘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;
        }
    }
}

猜你喜欢

转载自blog.csdn.net/weixin_45509601/article/details/118736728