ExistaPrimeDivImp

Se dă un şir cu n elemente, numere naturale. Folosind metoda Divide et Impera să se verifice dacă în şir există elemente prime.

Date de intrare
Programul citește de la tastatură numărul n, iar apoi cele n elemente ale şirului.

Date de ieşire
Programul afișează pe ecran mesajul DA, dacă şirul conţine elemente prime, respectiv NU în caz contrar.

Restricţii şi precizări

1<=n<=200

elementele şirului vor fi mai mici decât 1.000.000.000

Exemplu
Date de intrare

5
21 8 6 10 8
Date de ieșire

NU

Solutie

#include <iostream>

using namespace std;
bool prim(int n)
{
      int d;
      if(n<=1) return 0;
      if(n%2==0&&n!=2) return 0;
      for(int d=3;d*d<n;d+=2)
      {
            if(n%d==0) return 0;
      }
      return 1;
}
int v[1005];
int divimp(int st,int dr)
{
      if(st==dr)
      {
            if(prim(v[st])==1)
                  return 1;
                  else
                  return 0;

      }
      else
      {
            int m=(st+dr)/2;
            int p1=divimp(st,m);
            int p2=divimp(m+1,dr);
            return p1+p2;
      }
}
int main()
{
    int n,st,dr;
    cin>>n;
    st=0;
    dr=n-1;
    for(int i=0;i<n;i++)
    {
          cin>>v[i];
    }
    if(divimp(st,dr)>=1)
       cout<<"DA";
       else cout<<"NU";
    return 0;
}