👤

Cerința
Se dă un şir format din n numere naturale nenule. Aflaţi cel mai mic număr natural, diferit de 1, care divide un număr maxim de numere din şir.

Date de intrare
Fișierul de intrare divizor112.in conține pe prima linie numărul n, iar pe a doua linie n numere naturale nenule separate prin spații.

Date de ieșire
Fișierul de ieșire divizor112.out va conține pe prima linie cel mai mic număr natural, diferit de 1, care divide un număr maxim de numere din şir.

Restricții și precizări
1 ≤ n ≤ 100.000
numerele de pe a doua linie a fișierului de intrare vor fi mai mici decât 1.000.000


Răspuns :

Răspuns:

Explicație:

#include <fstream>

#include <iostream>

using namespace std;

 

int main()

{

   fstream fin("divizor112.in");

   ofstream     fout ("divizor112.out");

    int p,mx=0,n, i,j,d,nr;

   int k[1000001]={0};

    fin>>n;

    for( i=1;i<=n;i++) {

        fin>>nr;

        d=2;

        while(nr>1) {

           p=0;

           while(nr%d==0) {

               nr=nr/d;

           p++; }

            if(p>0) {

               k[d]++;

            if(k[d]>mx) {

                mx=k[d];

                j=d;

            }

            }

         

        if(d*d>=nr)

            d=nr;

        else

           d++;

        }

    }

    fout<<j;

    return 0 ;

}