Am întâmpinat dificultăți la problema soft_prime (#3525 pe site-ul pbinfo). Primesc 60p pe codul meu și doresc să știu ce optimizări pot să îi mai atribui sau chiar să îmi oferți indicații suplimentare față de cele prezente la problemă. Am atașat codul meu. Vă mulțumesc anticipat! P.S: la problemă primesc doar eroarea ”Caught fatal signal 11” (´。_。`)
Răspunsuri la întrebare
Răspuns:
#include <cstdio>
#include <algorithm>
using namespace std;
int nr,i,j,q,m,x,ok,n,total;
int prim[170], v[1001], a[22000];
char p[1010];
void eratostene()
{
p[1] = 1;
nr = 0;
for(i = 2; i <= 1009; i++)
if(p[i]==0)
{
nr++;
prim[nr] = i;
j = i+i;
while(j <= 1009)
{
p[j] = 1;
j = j+i;
}
}
}
int main()
{
eratostene();
freopen("soft_prime.in","r",stdin);
freopen("soft_prime.out","w",stdout);
//prima citire: aflu valoarea mediana
scanf("%d", &n);
for(i = 1; i <= n; i++)
{
scanf("%d", &x);
v[x/1000]++;
}
i = 0;
total = 0;
while(total < n/2)
{
total += v[i];
i++;
}
m = 1000*(i-1);
// a doua citire: aflu elem prime mai mici decat mediana
rewind(stdin);
scanf("%d", &n);
q = 0;
for(i = 1; i <= n; i++)
{
scanf("%d", &x);
if(x <= m)
{
ok = 1;
for(j = 1; prim[j]*prim[j]<=x; j++)
if(x % prim[j] == 0){ok = 0; break;}
if(ok)
{
q++;
a[q] = x;
}
}
}
sort(a+1, a+q+1);
for(i = 1; i <= q; i++)
printf("%d ", a[i]);
// a trei acitire : aflu elem prime mai mari decat mediana
rewind(stdin);
scanf("%d", &n);
q = 0;
for(i = 1; i <= n; i++)
{
scanf("%d", &x);
if(x > m)
{
ok = 1;
for(j = 1; prim[j]*prim[j]<=x; j++)
if(x % prim[j] == 0){ok = 0; break;}
if(ok)
{
q++;
a[q] = x;
}
}
}
sort(a+1, a+q+1);
for(i = 1; i <= q; i++)
printf("%d ", a[i]);
fclose(stdin);
fclose(stdout);
return 0;
}
Explicație: