2017-11-25 9 views
-1

kann mir jemand helfen und diese Frage mit c lösen? Bitte verwenden Sie nur während und wenn.Primzahl mit c, nur wenn und solange

„Schreiben Sie ein Programm, das eine ganze Zahl nimmt. Das Programm wird auf dem Bildschirm angezeigt werden‚Prime‘, wenn Die Zahl ist vorläufig. Eine Primzahl ist eine ganze Zahl, eine positive Zahl, die teilt Und nur auf 1 und selbst ohne einen Rest. "

#include <stdio.h> 

int main() 
{ 
    int num, i; 
    num = 0, i = 2; 

    printf("please enter a number\n"); 
    scanf("%d", &num); 

    while (i<num) 
    { 
     if ((num%i) == 0) 
     { 
      printf("no prime\n"); 
      break; 
     } 
     i++; 
    } 
} 

wie weiter?

so ist das besser?

#include<stdio.h> 
#include <math.h> 
int main(void) 
{ 
int number; 
int is_prime = 1; 
scanf("%d", &number); 
int i = 2; 
while (i <= sqrt(number)) { 
    if (number%i == 0) { 
     is_prime += 1; 
     break; 
    } 
    i++; 
} 
if (is_prime == 1) printf("prime\n"); 
else { printf("not prime\n"); } 

return 0; 
} 
+0

für keine andere * Bedeutung, do-while, Schalter, ... * Schleife ? Es ist machbar mit nein * wenn * in diesem Fall ... Beginnen Sie mit einem "* für * ist ein * während *", "für (a; b; c) Körper" ist "a; while (b) {Körper; c; } Das sollte machbar sein. –

+0

#include int main() { \t int num, i; \t Anzahl = 0, i = 2; \t printf ("Bitte geben Sie eine Nummer ein \ n"); \t scanf ("% d", &num); \t while (i

+0

'num = 0, i = 2;' Das sieht nicht nach einer guten Idee aus. Coma-Operator könnte nett sein, aber hier ist es nicht sinnvoll. Auch die leere Parameterliste für die Funktionsdefinition ist veraltet. – Gerhardh

Antwort

0

Hier ist eine allgemeine Pseudo-Code Antwort von Wikipedia:

function is_prime(n) 
    if n ≤ 1 
     return false 
    else if n ≤ 3 
     return true 
    else if n mod 2 = 0 or n mod 3 = 0 
     return false 
    let i ← 5 
    while i * i ≤ n 
     if n mod i = 0 or n mod (i + 2) = 0 
      return false 
     i ← i + 6 
    return true 
+0

Ja, aber ich studiere nicht in Klasse nur während Schleife ...:(also muss ich nur diese verwenden –

+0

@alondavidi Es gibt nur eine while-Schleife und ein paar wenn sonst Anweisungen – Gerhardh

+0

vielen Dank Freund –

0
#include<stdio.h> 
#include <math.h> 
int main(void) 
{ 
    int number; 
    int p = 1; 
    scanf("%d", &number); 
    int i = 2; 
    while (i <= sqrt(number)) { 
     if (number%i == 0) { 
      p += 1; 
      break; 
     } 
     i++; 
    } 
    if (p == 1) printf("prime"); 
    else { printf("not prime"); } 

    return 0; 
} 
+0

vielen Dank –

+1

Schlechter Code Mighty ineffizient. Sie müssen fortfahren, bis sqrt der Nummer. Pause wäre auch eine gute Idee. – user902384

+0

können Sie mir bitte besseren Code geben? –

0

Code anpassen unten wie:

#include <stdio.h> 

int main() 
{ 
    int num=0, i=2, is_prime=1; 

    printf("please enter a number\n"); 
    scanf("%d", &num); 

    while (i*i<=num) 
    { 
     if ((num%i) == 0) 
     { 
      printf("no prime\n"); 
      is_prime = 0; 
      break; 
     } 
     i++; 
    } 
    if(is_prime) { 
     printf("prime\n"); 
    } 
} 
+0

Muss auch die Gleichheit testen, 'i <= sqrt (num)' aber effizienter ist 'i * i <= num' –

+0

Danke @WeatherVane für die Verbesserung. – user902384

+0

danke schönen Code –

0

Ihr Code funktioniert, aber es wäre besser, wenn Sie zeigen "prime" an, wenn eine Zahl tatsächlich prim ist.

Was Sie tun können, ist auf der gleichen Linie bleiben, aber nach der Schleife überprüfen, ob eine „nicht prime“ Bedingung

while (i<num) 
{ 
    if ((num%i) == 0) 
    { 
     break; 
    } 
    i++; 
} 
// If a 'break' occurred, that's not a prime 
if (i<num) printf("Not a prime\n"); 
else printf("Prime\n"); 

Hinweis geschehen, dass anstelle i 2-num gehen zu haben, you could go up to sqrt(num).

Einige Inspiration für Sie zu lesen, ohne 'wenn', gib 1 (prime) oder 0 (keine Primzahl)

int prime_no_if (int x) { 
    int n=1; 
    do n++; while(n < x && (x % n)); 
    return n >= x; 
} 
+0

so funktioniert mein Code tatsächlich :) danke! –

+0

Nicht 100%, da es nicht angezeigt wurde, wenn eine Zahl prim ist (lies die Antwort ein bisschen mehr :-) –