原题链接:Problem - B - Codeforceshttps://codeforces.com/contest/1542/problem/B
题意简述: 在一个无限集合中恒有元素1。如果存在x,则x*a和x+b也存在。
例:集合前几项有 1,1+b,1*a,1+a+b,a*a,(1+b)*a,...
每次询问给定你n a b 问 n 在集合中是否存在
集合中每个元素都由 a^x + b*y (x,y >= 0 但不能同时为0) 构成
例如:a=3 b=6 有 1 3 7 9 13
即 n 需满足 n = a^x + b*y
枚举x 判断n - a^x 能否被b整除
ps:枚举y 增长太慢 会T
#include <iostream>
#include <algorithm>
using namespace std;#define int long longconst int N = 1e6 + 5;
int b[N];void solve()
{int n, a, b;cin >> n >> a >> b;//枚举x 判断n - a^x 能否被b整除 t = a^xint flag = 0;for(int t = 1; t <= n; t *= a ){if((n - t)% b == 0){flag = 1;break;}//防止死循环 a=1if(a == 1) break;}if(flag == 1) cout << "Yes\n";else cout << "No\n";
}signed main()
{ios::sync_with_stdio(false);int t;cin >> t;while(t --){solve();}
}