牛客 模

题意:

给定四个整数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\n";
        }
        else{
            cout << "Yes\n";
        }
    }
    return 0;
}

 

posted @ 2020-07-27 19:55  君顾  阅读(121)  评论(0编辑  收藏  举报