Advertisement

Plus and Multiply(1500)

阅读量:

Plus and Multiply

题面翻译

有一个无穷大的正整数集合 S,该集合按下面所述方法生成:

数字 1 在集合 S 中。

若数字 x 在该集合中,那么数 x \times a 和数 x+b 均在集合 S 中。(其中 ab 为给定常数)

现在给出数 n,a,b,请判断 n 是否在集合 S 中(此处给出的 ab 就是上述集合生成方法中的 ab),若在请输出 Yes,否则输出 No。多组数据。

令数据组数为 t,那么有 1 \leq t \leq 10^51 \leq n,a,b \leq 10^9

题目描述

There is an infinite set generated as follows:

  • 1 is in this set.
  • If x is in this set, x \cdot a and x+b both are in this set.

For example, when a=3 and b=6 , the five smallest elements of the set are:

  • 1 ,
  • 3 ( 1 is in this set, so 1\cdot a=3 is in this set),
  • 7 ( 1 is in this set, so 1+b=7 is in this set),
  • 9 ( 3 is in this set, so 3\cdot a=9 is in this set),
  • 13 ( 7 is in this set, so 7+b=13 is in this set).

Given positive integers a , b , n , determine if n is in this set.

输入格式

The input consists of multiple test cases. The first line contains an integer t ( 1\leq t\leq 10^5 ) — the number of test cases. The description of the test cases follows.

The only line describing each test case contains three integers n , a , b ( 1\leq n,a,b\leq 10^9 ) separated by a single space.

输出格式

For each test case, print “Yes” if n is in this set, and “No” otherwise. You can print each letter in any case.

样例 #1

样例输入 #1

复制代码
    5
    24 3 5
    10 3 6
    2345 1 4
    19260817 394 485
    19260817 233 264
    
    
      
      
      
      
      
      
    

样例输出 #1

复制代码
    Yes
    No
    Yes
    No
    Yes
    
    
      
      
      
      
      
    

提示

In the first test case, 24 is generated as follows:

  • 1 is in this set, so 3 and 6 are in this set;
  • 3 is in this set, so 9 and 8 are in this set;
  • 8 is in this set, so 24 and 13 are in this set.

Thus we can see 24 is in this set.

The five smallest elements of the set in the second test case is described in statements. We can see that 10 isn’t among them.

思路:因为只有乘法和加法假设数为x,则我们先乘以a然后在加上b,与我们先加上b在乘以a其实是等价的,因为变换次数是无限的,因此我们可以想到n = a的x次方 + b的y次方,因为指数型函数指数爆炸式增长,因此我们来枚举x,枚举过程中我们只需要判断n - a的x次方对b取模是不是0即可

AC代码:

复制代码
    #include<bits/stdc++.h>
    
    using namespace std;
    
    typedef long long ll;
    typedef pair<int, int>PII;
    typedef pair<int, double>PDD;
    const int N=2e5 +10;
    const int MOD = 1e9 + 7;
    const int INF=0X3F3F33F;
    const int dx[]={-1,0,1,0,-1,-1,+1,+1};
    const int dy[]={0,1,0,-1,-1,+1,-1,+1}; 
    
    //马
    const int dxx[]={-1,2,1,1,-1,2,-2,-2};
    const int dyy[]={2,1,-2,2,-2,-1,-1,1};    
    const int M = 1e7 + 10;
    
    int t;
    int main()
    {
    	cin >> t;
    	while(t --){
    		ll n, a, b;
    		cin >> n >> a >> b;
    		if(a == 1)
    		{
    			if((n - 1) % b == 0) puts("Yes");
    			else puts("No");
    		}
    		else {
    			int f = 0;
    			for(ll i = 1; i <= n; i *= a)
    			{
    				if((n - i) % b == 0)
    				{
    					f = 1;
    					break;
    				}
    			}
    			if(f) puts("Yes");
    			else puts("No");
    		}
    	}
    	return 0;
    }
    
    
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
    

全部评论 (0)

还没有任何评论哟~