我面临如下问题。他们给了我一个包含n个数字的数组,我需要使用“分治法”打印出其中是否包含任何质数。我已经解决了这个问题,但因为效率不高(据他们说),只得到了70/100的成绩。
#include <iostream>
using namespace std;
bool isPrime(int x){
if(x == 2) return false;
for(int i = 2; i <= x/2; ++i)
if(x%i==0) return false;
return true;
}
int existaP(int a[], int li, int ls){
if(li==ls)
if(isPrime(a[li]) == true) return 1;
else return 0;
else return existaP(a, li, (li+ls)/2)+existaP(a, (li+ls)/2+1, ls);
}
int main(){
int n, a[10001];
cin >> n;
for(int i = 1; i<=n; ++i) cin >> a[i];
if(existaP(a,1,n) >= 1) cout << "Y";
else cout << "N";
return 0;
}
existaP()
中递归的附加值是什么?输入数组是否已排序? - rustyx