Registreer FAQ Berichten van vandaag


Ga terug   Scholieren.com forum / Technologie / Software & Hardware
Reageren
 
Topictools Zoek in deze topic
Oud 30-06-2004, 11:38
Dr HenDre
Avatar van Dr HenDre
Dr HenDre is offline
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?

Laatst gewijzigd op 30-06-2004 om 11:51.
Met citaat reageren
Advertentie
Oud 30-06-2004, 11:51
Verwijderd
ik snap je functie niet echt, maar naar mijn idee vergeet je de returnwaarde van isPrime af te vangen in je recursive functie.

voorbeeldje uit de losse pols:
Code:
// Faculteit
// Faculteit van 4 is 4 * 3 * 2 * 1 = 24
int faculteit( int n )
{
  int nReturn;
  if( n == 0 ) // Escape value
  {
    nReturn = 1;
  }
  else
  {
    nReturn = faculteit( n - 1 ) * n;
  }

  return nReturn;
}
Welke parameters geef je mee aan je functie? Het lijkt erop dat je globale variabelen gebruikt...

Laatst gewijzigd op 30-06-2004 om 11:53.
Met citaat reageren
Oud 30-06-2004, 12:14
unpopular
unpopular is offline
int isPrime(int n, int a, const int Mn)
{
int ret;

if((n-1) > 0)
{
a = ((a*a)-2) % Mn;
ret = isPrime(n-1, a, Mn);
}
else
{
if( a == 0 )
{
ret=ret+4; // jij zegt toch a(0) = 4;
}
}
return ret;
}


a0 wordt niet gedefineerd ??? toch (al staat hij er nu niet meer in)
Met citaat reageren
Advertentie
Reageren


Regels voor berichten
Je mag geen nieuwe topics starten
Je mag niet reageren op berichten
Je mag geen bijlagen versturen
Je mag niet je berichten bewerken

BB code is Aan
Smileys zijn Aan
[IMG]-code is Aan
HTML-code is Uit

Spring naar


Alle tijden zijn GMT +1. Het is nu 06:21.