1**循环遍历判断多个和数字较大的素数效率低下,用打素数表的方法和二分查找可以提高很大效率。**
下面贴出代码:
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cmath>
#include<cstring>
#include<set>
using namespace std;
//判断是否为素数
bool is_prime(int a){
if (a == 1) return false;
for (int i = 2; i <= sqrt(a); i++){
if (a%i == 0) return false;
}
return true;
}
int prime[10001];
//打10001以内的素数表
void Do(){
int len = 0;
memset(prime, 0, sizeof(prime));
for(int i = 2; i < 10001; i++){
if (is_prime(i)){
prime[len++] = i;
}
}
}
//二分查找法判断是否在表中
bool search_(int a[], int len, int key){
int l = 0, r = len-1, mid = (l+r)/2;
while(l <= r){
if (a[mid] == key) return true;
if(a[mid] > key) r = mid-1;
if(a[mid] < key) l = mid+1;
mid = (l+r)/2;
}
return false;
}
int main()
{
Do();
int n;
while(cin>>n){
while(n--){
int a;
cin>>a;
if (search_(prime, a+1, a))
cout<<"Yes"<<endl;
else cout<<"No"<<endl;
}
}
return 0;
}