ik heb een recursieve functie waarmee ik wil bepalen of een ingevoerde getal wel of geen priemgetal is. De wiskundige functie die daarbij hoort is de volgende:
a(0) = 4;
a(n+1) = (a(n)²-2) % M(n)
als a(n-2) = 0 dan is n een priemgetal (wel effe in de gaten houden dat de n in de fucntie een andere n is dan de n die je opgeeft om te chekken of het een priem is)
M(n) = 2^n -1.
Dit is mn functie:
Code:
int isPrime(int n, int a, const int Mn)
{
if( a == 0 && (n-1) >= 2)
{
a = ((a0*a0) - 2) % Mn;
isPrime(n-1, a, Mn);
}
else
{
if((n-1) != 1)
{
a = ((a*a)-2) % Mn;
isPrime(n-1, a, Mn);
}
else
{
if( a == 0 )
{
return 1;
}
else
{
return 0;
}
}
}
}
nu werkt het op zich wel maar het probleem is, dat ie dan nadat ie bij return 1 of 0 komt eerst n-2 keer weer de if doorloopt om de "geopende" functies te "sluiten".
Nu is dat bij kleine getallen geen probleem, maar als de getallen groter worden krijg je veel overbodig verlies van tijd.
(en ja dit is niet echt een geschikte versie voor grote getallen maar dat komt later)
Iemand tips?