Informatică, întrebare adresată de Utilizator anonim, 8 ani în urmă

Am incercat sa fac problema #3313 Eratostene2 de pe pbinfo.ro si imi da bine exemplele , dar cand o pun primesc 0 puncte, imi poate zice cineva ce am gresit?

#include

using namespace std;

ifstream fin("eratostene2.in");
ofstream fout("eratostene2.out");

int E[1000000]={0};

int main()
{
int max=1000000;
for(int i=2;i*i<=max;i++)
if(E[i]==0)
for(int j=i;j<=max;j=j+i)
E[j]++;
int n, m;
fin>>n;
for(int i=1;i<=n;i++)
{
fin>>m;
fout< }
return 0;
}


Porecla0987: Ai gresit problema, pe sc.urt
Porecla0987: Gandeste-te putin la ce ti se cere sa faci si ce ai facut tu
Utilizator anonim: exact
Porecla0987: M-am uitat mai atent la codul tău și se pare că e destul de corect. Încearcă să te joci puțin cu cifrele, pbinfo are nevoie de scheme de genul uneori. Adică, fă din 1 milion 10 milioane, e foarte posibil să primești mai multe puncte.
Porecla0987: Cu toate că ai uitat să verifici dacă i e prim în ciur; doar numerele prime cresc E[j], nu toți divizorii.

Răspunsuri la întrebare

Răspuns de Porecla0987
2

Initial am facut un cod functional, apoi am observat ca ideea era sa rezolv folosind ciurul lui Eratostene. L-am refacut acum, folosind codul tau ca inspiratie. Dintr-un motiv sau altul, pbinfo ii da 0 puncte, cu toate ca poti verifica si tu ca da macar la exemplu raspunsul corect.

#include <iostream>

#include <fstream>

using namespace std;

bool isPrime(int number)

{

if (number <= 1)

 return false;

if (number == 2)

 return true;

if (number % 2 == 0)

 return false;

int divisor = 3;

while (divisor * divisor <= number)

{

 if (number % divisor == 0)

  return false;

 divisor += 2;

}

return true;

}

int main()

{

ifstream fileIn("eratostene2.in");

ofstream fileOut("eratostene2.out");

int numberOfNumbers, number;

fileIn >> numberOfNumbers;

int sieve[1000000] = {0};

int maxValue=1000000;

for (int i = 2; i * i <= maxValue; ++i)

{

 if (isPrime(i))

  for (int j = i; j <= maxValue; j += i)

   ++sieve[j];

}

for (int i = 0; i < numberOfNumbers; ++i)

{

 fileIn >> number;

 fileOut << sieve[number] << " ";

}

fileIn.close();

fileOut.close();

}

Alte întrebări interesante