Co pewien czas pojawia się prośba o wyznaczenie liczb pierwszych z podanego zakresu z użyciem funkcji. Wydawało mi się, że użycie funkcji (odkładanie argumentów na stos,..) powinno wydłużyć działanie programu. Postanowiłem sprawdzić o ile. Zacząłem od Javy (program zgodnie z klasyfikacja Krolika jest bardzo lamerski).
//bez użycia funkcji (liczba max jest parametem wywołania)
double gr=0.0d;
for(int n=1;n<=max;n++)
{
if(n%2!=0)
gr=Math.sqrt(n);
for (int i=3;i<=gr;i+=2)
if ((n%i)==0)
break;
}
//z użyciem funkcji
for(int n=1;n<=max;n++)
isPrime2(n);
static private boolean isPrime2(int n)
{
int i;
if (n<2)
return false;
else
if ((n%2)==0 && (n!=2))
return false;
double gr=Math.sqrt(n);
for (i=3;i<=gr;i+=2)
if ((n%i)==0)
return false;
return true;
}
Ku mojemu zdziwieniu kod z użyciem funkcji jest szybszy. Stosunek czasów wykonania zmierza do 2 (przy wzroście max).
Sprawdziłem również w C++ i Pythonie. Efekt jest taki sam.