数组a记录了物理攻击i次减少的总血量,只能够得40分,求解答
#include<iostream>
using namespace std;
int t,h,k;
int sum=1,a[20];
bool Prime(int n) {
if(n==1) return 0;
for(int i=2; i*i<=n; i++) {
if(n%i==0) return 0;
}
return 1;
}
//1 3 7 15 31 63 127 255 511 1023 2047 4095 8191 16383 32767 65535 131071 262143
int main() {
for(int i=1; i<=18; i++) {
sum*=2;
a[i]=sum-1;
}
cin>>t;
for(int i=1; i<=t; i++) {
cin>>h;
if(Prime(h)){
cout<<1;
continue;
}
bool flag=0;
for(int j=1; j<=18&&(h>=a[j]); j++) {
if(h-a[j]==0) {
k=j;
flag=1;
break;
}
if(Prime(h-a[j])){
k=j+1;
flag=1;
break;
}
}
if(flag){
cout<<k<<endl;
}else{
cout<<-1<<endl;
}
}
return 0;
}