de ce da eroare Segmentation fault ?
#include
#include
int n;
int
are_divizor (int p, int d)
{
if (d > sqrt (p))
return 0;
else if (p % d == 0)
return 1;
else
are_divizor (p, d + 1);
}
void
prim (int p)
{
/* if (!are_divizor (p, 2))
{
printf ("\n%i", p);
return;
}
else
prim (p + 1);*/
if (are_divizor(p,2))
prim(p+1);
else {
printf("\n%i", p);
return;
}
}
void
main ()
{
printf ("n= ");
scanf ("%i", &n);
prim (n + 1);
}
Ar trebui să pui
return are_divizor (p, d + 1);
în loc de
are_divizor (p, d + 1);
Altfel ţi se umple stiva şi de asta ai segmentation fault.
E cam ciudat programul, ce ar trebui să arate? Cel mai mic număr prim mai mare decât ceva?
[url=http://counter.li.org/]Linux registered user #368449[/url]
Programul este luat de la:
http://www.scribd.com/doc/327726/Culegere-probleme-de-informatica
la pg 46 citez:
4. Se citeşte n, să se găsească primul număr prim mai mare decît n. (Se presupune cunoscută demonstraţia faptului că există p-prim mai mare decît oricare n. Sîntem astfel siguri că algoritmul se opreşte! )
Atunci este corect. Doar să nu uiţi de return acolo în funcţie.
Ca observaţie, funcţia main() ar trebui să întoarcă int, nu void. Ştiu că aşa se face la liceu, dar nu este conform standardului.
[url=http://counter.li.org/]Linux registered user #368449[/url]
Si... daca pot sa mentionez... algoritmul e destul de ineficient. :)
"Prostilor! Nu mi se spune degeaba Maestrul Mortii! Victoria voastra va va fi infrangerea. Triumful vostru va va fi sicriul. Mi-am invins propria moarte, si din Abis am renascut..."