👤

Buna! Poate cineva sa rezolve problema 3318 de pe pbinfo (eratostene7)? Va rog mult! Mi-a trebui pana maine la 21:00 daca se poate...Dau tot ce vreti (follow, inima, coroana)​

Răspuns :

Am facut cu doua variante, dar pentru amandoua se trece de limita de timp.

#include <iostream>

#include <fstream>

using namespace std;

ifstream fin("eratostene7.in");

ofstream fout("eratostene7.out");

int n, i, k, x, v[1000000], nr[1000000], j;

int main()

{

           fin >> n;

           int p[1000000];

           for (i = 1; i <= 1000000; i++) p[i] = 1;

v[1] = v[0] = 1;

       for (i = 2; i * i <= 1000000; i++)

       if (v[i] == 0) {

           p[i] = i;

           nr[i]=1;

           for (j = 2 * i; j <= 1000000; j = j + i) {

               v[j] = 1; p[j] = p[j] * i; nr[j] = nr[j] + 1;

           }

       }

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

               fin >> x >> k;

               if (x == p[x] && nr[x] == k) fout << "DA" << endl;

               else fout << "NU" << endl;

           }

   return 0;

}

A doua varianta

#include <iostream>

#include <fstream>

using namespace std;

ifstream fin("eratostene7.in");

ofstream fout("eratostene7.out");

int n, i, k, k2, x, d, ok;

int main()

{

   fin >> n;

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

       fin >> x >> k;

       k2 = 0;

       d = 2;

       ok = 0;

       while (x > 1) {

           if (x%d == 0) {x = x/d; ok ++; k2++;}

           else {ok = 0; d++;}

           if (ok > 1 || k2 > k) {ok = 0; x = 1;}

       }

       if (ok == 1 && k2 == k) fout << "DA" << endl;

       else fout << "NU" << endl;

   }

   return 0;

}

Vă mulțumim că ați vizitat site-ul nostru dedicat Informatică. Sperăm că informațiile oferite v-au fost de ajutor. Dacă aveți întrebări sau nevoie de asistență suplimentară, nu ezitați să ne contactați. Vă așteptăm cu drag data viitoare și nu uitați să ne adăugați la favorite!


En Learnings: Alte intrebari