题意:
给定四个整数a, b, c, k, 回答是否存在一个正整数n,使得a * n 在k进制表示下各位的数值之和模b为c
思路:
现x因n可无限大,抽象的理解,在无限且无进位的空间,只有一位答案为a*x,但是由于进位(k进1),带来的影响是(i - k),所以a * x + b * y + z * (1 - k) = c有解(即c % gcd(a, b, (1 - k)) == 0)即可
Code:
#include <cstdio> #include <cstring> #include <iostream> #include <algorithm> using namespace std; typedef long long ll; int t; ll a, b, c, k, n; ll gcd(ll a, ll b){ return b ? gcd(b, a % b) : a; } int main(){ cin >> t; while(t --){ cin >> a >> b >> c >> k; if(c % gcd(gcd(a, 1 - k), b)){ cout << "No "; } else{ cout << "Yes "; } } return 0; }