首页 > 其他分享 >CF1542B Plus and Multiply

CF1542B Plus and Multiply

时间:2024-01-21 09:44:37浏览次数:20  
标签:CF1542B ak 集合 Plus Multiply ax

CF1542B Plus and Multiply

题目传送门

题意

有一个集合,最开始集合中只有\(1\),又有\(a\),\(b\),如果集合中存在\(k\),那么将\(ka\)和\(k+b\)加入集合

试求,\(n\)是否尊在于集合之中

思路

稍加枚举(或者瞪眼大法)可得,该集合中的任何数都可被表示为\(k=ax+by\)(\(a,b\)为非负整数)

分个类更直观一些

设已有\(k\)为\(ax+by\),则会有新的两个数\(ak\)和\(b+k\)进入集合,一次求出:

  • \(ak=a(xa)+b(ya)\)

  • \(b+k=ax+b(y+1)\)

所以最后只需要枚举\(x\),再看\(n-ax\)是否整除\(b\)(即是否存在非负整数\(y\))即可

代码

#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,a,b,now;
void run()
{
    cin>>n>>a>>b;
    if(a==1)
    {
        if(n%b==1 || n==1 || b==1) cout<<"Yes"<<endl;
        else cout<<"No"<<endl;
        return;
    }
    now=1;
    while(now<=n)
    {
        if((n-now)%b==0)
        {
            cout<<"Yes"<<endl;
            return;
        }
        now*=a;
    }
    cout<<"No"<<endl;
}
signed main(){
    ios::sync_with_stdio(0);
    cin.tie(0);cout.tie(0);
    int t;
    cin>>t;
    while(t--) run();
    system("pause");
    return 0;
}

标签:CF1542B,ak,集合,Plus,Multiply,ax
From: https://www.cnblogs.com/lyk2010/p/17977530

相关文章