CF1912D Divisibility Test 题解

· · 题解

小学奥数判断整除的几种便捷方法。

考虑三种操作的实质:

显然 k 最大为 n。枚举即可;注意判断无解。

放代码:

#include<bits/stdc++.h>
using namespace std;
int main(){
  ios::sync_with_stdio(false);
  int t; cin>>t;
  while(t--){
    int b,n; cin>>b>>n;
    long long c=1; bool f=false;
    for(int k=1;k<=n&&!f;k++){
      if((c*=b)%=n;!c)cout<<"1 "<<k<<'\n',f=true;
      if(c==1)cout<<"2 "<<k<<'\n',f=true;
      else if(c==n-1)cout<<"3 "<<k<<'\n',f=true;
    }
    if(!f)cout<<"0\n"; // 无解
  }
  return 0;
}