当前位置: 代码迷 >> 综合 >> Codeforces Round #729 (Div. 2) B. Plus and Multiply
  详细解决方案

Codeforces Round #729 (Div. 2) B. Plus and Multiply

热度:12   发布时间:2023-12-06 13:50:15.0

原题链接: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();}
}

  相关解决方案