Informatică, întrebare adresată de ana427257, 8 ani în urmă

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)​


ana427257: daca nu stiti va rog nu puneti raspunsuri aiurea...
stefaniaistrate: este raportat al meu
stefaniaistrate: o sa se stearga
stefaniaistrate: scz
ana427257: am zis in general...
stefaniaistrate: ok
OiLoveYouO: am rezolvat, dar depaseste limita de timp
OiLoveYouO: nu imi dau seama cum sa rezolv altfel, daca vrei iti trimit, poate tie iti vine vreo idee si reusesti sa-l faci
ana427257: te rog, trimite
ana427257: doar ca are ciur si de astea...? Adica fara as putea si eu sa fac, dar nu intra timpul

Răspunsuri la întrebare

Răspuns de OiLoveYouO
17

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;

}


ana427257: Ms!!!
OiLoveYouO: cu placere
Alte întrebări interesante