代码如下:
#include<bits/stdc++.h>
using namespace std;
long long cinn[100],a[100],ans=0;
int main()
{
int t;
cin>>t;
for(int i=1;i<=t;i++)
cin>>cinn[i];
for(int i=1;i<=30;i++)
a[i]=pow(2,i-1);
for(int i=1;i<=t;i++)
{
ans=0;
int k=1;
while(1){
bool flag=1;
for(int j=2;j<cinn[i];j++)
if(cinn[i]%j==0){
flag=0;
break;
}
if(flag){
cinn[i]-=cinn[i];
ans++;
break;
}else{
cinn[i]-=a[k];
ans++;
}
k++;
}
if(cinn[i]!=0){
cout<<-1;
continue;
}
cout<<ans<<endl;
}
return 0;
}
后面得6个数据点全挖了,应该是“-1”特判的问题,代码逻辑可能比较乱,烦劳各位大神提点建议。