Het vinden van Priemgetallen met C

T

tanky321

Guest
Hallo, Ik heb nog een opdracht, voor mijn programmeren in C klasse im moeite met. Het programma is te veronderstellen de N-priemgetal, im te veronderstellen pointers en functies te gebruiken te vinden, maar im proberen om gewoon te krijgen om nog te werken zonder dat een van die. Hieronder is wat ik heb bedacht, ik dacht dat het zou werken, maar het doesnt. Zodra ik te voeren in een getal, is het doesnt alles doen. Kan iemand mij helpen? # Include int main (void) {int keuze; int count = 2; printf ("Prime Number CALCULATOR \ n"); printf ("\ nChoose een priemgetal =>"); scanf_s ("% d ", & keuze); while (1) {if (keuze == 1 | | keuze == 2) {printf ("The Number is% d", keuze); break;} else if (count% 2 == 0 | | count% 3 = = 0 | | count% 5 == 0 | | count% 7 == 0 | | count% 11 == 0) voort te zetten; anders count + = 2; if (count == keuze) break;} printf ("Het getal is % d ", count);
 
Hoi, Wat je moet doen is een kijkje in uw help-bestanden op wat de 'verder' verklaring is. Inzicht in deze zal u laten weten waarom het programma niet doen wat je wilt. Probeer eens een aantal breekpunten in op de if en else statements in je while lus en kijk wat er gebeurt! Cheers, Nick [size = 2] [color = # 999999] Toegevoegd na 8 minuten: [/color] [/size] Je moet ook werken aan je algoritme. Die niet te berekenen priemgetallen, het vraagt ​​alleen maar een gebruiker in te voeren men dan probeert te tellen tot de telling gelijk aan het aantal dat is ingevoerd (hoewel het niet omdat je het verhogen van het tellen in twee's).
 
Hmm ik lees op het continue-statement, maar im still soort verward. Als de rest gelijk is aan nul, dat betekent dat het niet priem, dus ik dacht dat mijn verder zou alleen de rest van de lus te omzeilen, en spring terug naar het begin?
 
Dat is wat de continue-statement doet, is het altijd terug te keren naar het begin van de lus als de telling wordt steeds groter. Uw telling begint bij 2 en Avery loop je toevoegen 2 tot en met het zo de rest van je modulus kloof wordt steeds zal worden 0! edit,: infact, bent u springen naar het begin o FDe lus voordat u verhogen uw tellen, zodat de variabele count blijft op 2.
 
Ahh ik zie wat je bedoelt. Im proberen om mijn algoritme te repareren, hopelijk zal werken! Thanks [size = 2] [color = # 999999] Toegevoegd na 2 uur en 5 minuten: [/color] [/size] Dit is mijn laatste gooi naar, ik weggelaten scanf is gewoon voor de duidelijkheid. Nu is het geven van me (1) als een antwoord op elke tijd voor iets anders dan 1, 2, of 3. Im met behulp van tel bij te houden hoeveel priemgetallen Ive gevonden, en num is alleen maar om het verhogen van het waarde aan nieuwe nummers te proberen. Im het verliezen van mijn knikkers hier! # Include int main (void) {int keuze = 5; int count = 1; int ans, int num = 0; while (1) {num + +; if (keuze == 1 | | keuze == 2 | | keuze == 3) {ans = keuze; break;} if (num% 2 == 1 | | nr 3% == 1 | | Num% 5 == 1 | | nr 7% == 1 | | num% 11 == 1 ) count + +; if (keuze = count) {ans = num; break;}} printf ("Dat priemgetal is% d \ n \ n \ n", ans), return (0);}
 
In de volgende regel, ik denk dat je wilt '==' in plaats van '=': [color = brown] if (keuze = count) [/color] Probeer waardoor alle waarschuwingen van uw compiler de boodschappen om hopelijk te vangen stiekeme bugs als dat.
 
Dat is een beetje geholpen, maar mijn algoritme is nog steeds fout. Voor de 7e priemgetal zijn geeft me 13861, ik denk dat ik gewoon niet zien? Im ongeveer klaar om mijn computer te gooien naar de muur! :)
 
Google "Eratosthenes zeef" voor een algoritme. [Size = 2] [color = # 999999] Toegevoegd na 20 minuten: [/color] [/size] Hier is een werkende algoritme / * Deze code is in het publieke domein. Gebruik voor welk doel dan ook op eigen risico. * / # Include # include / * De code gaat ervan uit, dat sizeof (unsigned) == 4 * / # define MAXN 100000000 / * maximale waarde van N * / # define P1 1562501 / * = ceil (MAXN/64) * / # definiëren P2 50000000 / * = ceil (MAXN / 2) * / # define P3 5000 / * = ceil (ceil (sqrt (MAXN)) / 2) * / unsigned zeef [P1]; # define GET (b) ((zeef [(b)>> 5 ]>>(( b) en 31)) & 1) nietig te maken () {registreren unsigned i, j, k, memset (zeef, 0, sizeof (zeef)), voor (k = 1; k 5] | = 1> 1) == 0));} int main () {int i, n; maken (); voor (n = 0, i = 0; i
 
Bedankt voor al jullie hulp! Alleen ding is, is dat we gebruikt arrays nog havent, dus cant ik ze gebruiken. En de lange id, hebben wij niet dat ofwel gebruikt. Ik denk dat ik ben gewoon gaan gooien handdoek in de ring, Ive kreeg de pointers te werken, dus zal het proberen wat meer, maar niet te veel! Nogmaals bedankt!!
 
Uw algoritme is raadselachtig. Het lijkt niet veel op een priemgetal algoritme. Hier is een simpele brute-force benadering (niet erg efficiënt). Het test een nummer voor primeness door te controleren om te zien of het deelbaar is door een geheel getal tussen 2 en het aantal van de wortel:
Code:
 # include # include int main (void) {int kandidaat, max, n; voor de (kandidaat = 2 ; kandidaat
 
En als je niet toegestaan ​​om math.h gebruiken (een bibliotheek voor elementaire rekenkundige bewerkingen), kunt u deze verion:
Code:
 # include "stdio.h" # include "math.h" int main (void) {int kandidaat , n; voor (kandidaat = 2; kandidaat
 

Welcome to EDABoard.com

Sponsor

Back
Top