一直 WA#15,明明没有问题啊!!!
他说 1w 次,我感觉我这个不到 1w 次
#include <bits/stdc++.h>
using namespace std;
//Start
typedef long long ll;
typedef double db;
#define mp(a,b) make_pair((a),(b))
#define x first
#define y second
#define be(a) (a).begin()
#define en(a) (a).end()
#define sz(a) int((a).size())
#define pb(a) push_back(a)
#define R(i,a,b) for(int i=(a),I=(b);i<I;i++)
#define L(i,a,b) for(int i=(b)-1,I=(a)-1;i>I;i--)
const int iinf=0x3f3f3f3f;
const ll linf=0x3f3f3f3f3f3f3f3f;
//Data
const ll N=1e5;
ll n,x=1;
ll Pow(ll a,ll x){
ll res=1;
for(;x;a*=a,x>>=1)if(x&1) res*=a;
return res;
}
//Sieve
bitset<N+1> np;
vector<ll> prime;
void Sieve(ll n){
np.set(1);
R(i,2,n){
if(!np[i]) prime.pb(i);
for(ll p:prime){
if(i*p>=n) break;
np.set(i*p);
if(i%p==0) break;
}
}
}
//Main
signed main(){
ios::sync_with_stdio(0);
cin.tie(0),cout.tie(0);
cin>>n,Sieve(n+1);
for(ll p:prime)
if(p*p<=n){
cout<<"B "<<p<<endl;
ll one; cin>>one;
if(p<=50){
ll l=0,r=ceil(log(n)/log(p)+0.001)+1;
while(r-l>1){
ll mid=(l+r)>>1;
cout<<"A "<<Pow(p,mid)<<endl;
ll cnt; cin>>cnt;
if(cnt>0) l=mid;
else r=mid;
}
x*=Pow(p,l);
} else {
R(i,1,20){
cout<<"A "<<Pow(p,i)<<endl;
ll cnt; cin>>cnt;
if(cnt<=0){x*=Pow(p,i-1);break;}
}
}
} else break;
ll nn=sqrt(sz(prime))+1,now=0;
cout<<"A "<<1<<endl;
ll sum,lb=-1,rb=-1; cin>>sum;
R(i,0,sz(prime))if(1ll*prime[i]*prime[i]>1ll*n){
cout<<"B "<<prime[i]<<endl;
ll cnt; cin>>cnt,sum-=cnt,now++;
if(now>=nn){
cout<<"A "<<1<<endl;
ll smt; cin>>smt;
if(smt!=sum){lb=i+1-nn,rb=i+1;break;}
now=0;
}
}
if(!~lb){
cout<<"A "<<1<<endl;
ll smt; cin>>smt;
if(smt!=sum){lb=sz(prime)-now,rb=sz(prime);}
now=0;
}
if(~lb){
R(i,lb,rb){
cout<<"A "<<prime[i]<<endl;
ll cnt; cin>>cnt;
if(cnt>0){x*=prime[i];break;}
}
}
cout<<"C "<<x<<endl;
return 0;
}