login  Naam:   Wachtwoord: 
Registreer je!
 Scripts:

Scripts > Overige > C en C++ > C - priemgetallen

C - priemgetallen

Auteur: pj_muller00 - 09 november 2006 - 18:40 - Gekeurd door: Joel - Hits: 6287 - Aantal punten: 2.75 (2 stemmen)




Aangezien ik een andere methode heb om priemgetallen te berekenen zet ik ze maar even hier.

Deze is een pak sneller als die van Joël. (No offence hé )

Ik zal even uitleggen hoe het werkt.
Er is een stelling die zegt dat je alle priemgetallen (behalve 2 en 3) kan schrijven als een veelvoud van 6 - of + 1.
!! Opgelet het zegt niet dat alle veelvouden van 6 + of - 1 priemgetallen zijn.

Hoe passen we dit concreet toe.
De eerste loop gaat telkens een nieuw mogelijk priemgetal aangeven (6n + - 1).
De tweede loop gaat dan delen door opnieuw de mogelijke priemgetallen.
Dit hoeft maar te gebeuren tot de vierkantwortel van het getal. Dit ga ik niet uitleggen, is zeer makkelijk te begrijpen 

Ik ben er tamelijk ver mee gegaan, één volledige dag laten draaien en ik zat op het grootste priemgetal dat ze 20 jaar geleden hebben gevonden.

Als je dat van vandaag wilt breken, raad ik je toch aan naar een andere methode te zoeken.  :P

Code:
  1. #include <stdio.h>
  2. #include <math.h>
  3. void main(void){
  4. int n = 11;//declareren
  5. int t, sqrt_n;
  6. int while1 = 1;
  7. int while2 = 1;
  8. int i =1;
  9. int show = 10000;//Om de hoeveel priemgetallen moet hij laten zien. als je het leesbaar wilt houden zet je dit op een groot getal
  10.  
  11. while(while1 == 1){//While true werkte niet :s vandaar :)
  12. t=6;
  13. sqrt_n = sqrt(n);
  14.  
  15. while(while2 == 1){
  16. if(n%(t-1)==0){//deelt met 6n-1
  17. break;
  18. }
  19. if(n%(t+1)==0){//deelt met 6n+1
  20. break;
  21. }
  22. if (t>sqrt_n){//zodat het deelgetal niet te groot wordt
  23. i++;
  24. if((i%show)==0){
  25. i=1;
  26. printf("%d %s", n,"\n");
  27. }
  28. break;
  29. }
  30. t+=6;
  31. }
  32. if ((n+1)%6==0){// Ga van 6n-1 naar de 6n+1
  33. n+=2;
  34. }
  35. else{//Ga van de 6n+1 naar 6n-1
  36. n+=4;
  37. }// Deze if else is gedaan om een extra loop uit te sparen, en dus ook tijd
  38. }
  39. }

Download code! Download code (.txt)

 Stemmen
Niet ingelogd.

 Reacties
Post een reactie
Lees de reacties (2)
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.039s