题解:CF2043B Digits
HuangBarry · · 题解
- 是否为
1 的倍数:
任何非零自然数都是1 的倍数。 - 是否为
3 的倍数:
只要n! 和d 的因子包含3 那么就是3 的倍数。 - 是否为
5 的倍数:
只要d=5 那么就是5 的倍数,因为是否是5 的倍数只用看个位。 - 是否为
7 的倍数:
因为1001\bmod7=0 所以1001\times111\equiv1001\pmod7 也是7 的倍数,所以只要n!\ge6 ,即n\ge3 或者d=7 就是7 的倍数。 - 是否为
9 的倍数:
跟判断是否为3 的倍数差不多,只要n! 和d 的因子3 的数量大于等于2 那么就是9 的倍数。
代码如下(个人喜欢用超长火车头):
#include<bits/stdc++.h>
#include<bits/extc++.h>
#define stl_priority_queue std::priority_queue
#define pbds_priority_queue __gnu_pbds::priority_queue
#define endl '\n'
#define Endl cout<<endl
#define Made return
#define by 0
#define Barry +0
#define Freopen(x) freopen(x".in","r",stdin);freopen(x".out","w",stdout);
#define debug(x) cout<<#x<<"----->"<<x<<endl;
using namespace std;
using namespace __gnu_pbds;
using namespace __gnu_cxx;
using ll=long long;
using ull=unsigned long long;
using ld=long double;
using pii=pair<int,int>;
using pll=pair<ll,ll>;
int t,n,d;
int main(){
//Freopen("filename");
ios::sync_with_stdio(false);
cin.tie(0),cout.tie(0);
cin>>t;
while(t--){
cin>>n>>d;
cout<<1<<" ";
if(n>=3||d%3==0)
cout<<3<<" ";
if(d==5)
cout<<5<<" ";
if(n>=3||d==7)
cout<<7<<" ";
if(n>=6||d==9||(n>=3&&d%3==0))
cout<<9;
Endl;
}
Made by Barry;
}