以下两份代码,只有第 8 行的判断不同,第一份 A 了,第二份 TLE。为什么?
#include<bits/stdc++.h>
using namespace std;
long long q,n,sqn;
bool isprime(long long x){
if(x == 2){
return 1;
}
for(long long i = 2; i*i <= x; i++){
if(x%i == 0){
return 0;
}
}
return 1;
}
int main(){
cin>>q;
while(q--){
cin>>n;
sqn = (long long)sqrt(n);
if(sqn*sqn != n || n == 1){
printf("NO\n");
continue;
}
if(isprime(sqn)){
printf("YES\n");
}else{
printf("NO\n");
}
}
return 0;
}
#include<bits/stdc++.h>
using namespace std;
long long q,n,sqn;
bool isprime(long long x){
if(x == 2){
return 1;
}
for(long long i = 2; i <= x/i; i++){
if(x%i == 0){
return 0;
}
}
return 1;
}
int main(){
cin>>q;
while(q--){
cin>>n;
sqn = (long long)sqrt(n);
if(sqn*sqn != n || n == 1){
printf("NO\n");
continue;
}
if(isprime(sqn)){
printf("YES\n");
}else{
printf("NO\n");
}
}
return 0;
}