这样写就ac
#include<bits/stdc++.h>
using namespace std;
int n;
int a;
bool f[1002009];
int main(){
cin>>a>>n;//ceil(sqrt(a*1.0))
f[1]=1;
for(int i=ceil(sqrt(a*1.0));i<=1001;i++){
for(int j=1;i*i*j<=1002001;j++){
f[i*i*j]=1;
}
}
for(int i=1;i<=n;i++){
int x;
cin>>x;
if(f[x]&&x>=a){
cout<<"lucky"<<"\n";
}
else{
while(f[x]==0||x<a){
x++;
}
cout<<x<<"\n";
}
}
return 0;
}
这样就不行???
#include<bits/stdc++.h>
using namespace std;
int n;
int a;
bool f[1002009];
int main(){
cin>>a>>n;//ceil(sqrt(a*1.0))
f[1]=1;
for(int i=2;i<=1001;i++){
for(int j=1;i*i*j<=1002001;j++){
f[i*i*j]=1;
}
}
for(int i=1;i<=n;i++){
int x;
cin>>x;
if(f[x]&&x>=a){
cout<<"lucky"<<"\n";
}
else{
while(f[x]==0||x<a){
x++;
}
cout<<x<<"\n";
}
}
return 0;
}
(只是把ceil(sqrt(a1.0))改成2就10pts,不改就ac,如果在ceil(sqrt(a1.0))的情况下a==1的话所有数都是幸运数了,不符合题意啊???)