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;
}
Răspunsuri la întrebare
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();
}