2012-04-06 14 views
0

Hallo! Ich versuche, eine Primzahl zu generieren, aber meine Bedingung i%i erzeugt einen Fehler.((i% 2 == 0) && (i% i == 0)) Diese Technik funktioniert nicht zum Generieren der Primzahl C#

Ich bekomme den Fehler "Versuch, durch Null zu teilen".

Wie würde ich das beheben ??

int a, n, i; 

Console.WriteLine("Enter ur number"); 

n = Convert.ToInt32(Console.ReadLine()); 

for (i = 0; i <= n; i++) 
{ 
    if ((i % 2 == 0) && (i % i == 0)) 
    { 
     a = i; 
     Console.WriteLine("The prime numbers are", a); 
    } 
} 

Console.ReadLine(); 

von Ihnen Hoffnung, bald zu hören ...

+7

'i% i' ist immer 0 (für' i> 0'), also ist die letztere Bedingung eine Tautologie. –

+2

Wie groß ist die Wahrscheinlichkeit, dass ein Patient ** [UR-Nummer] (http://www.rch.org.au/rchhis/requests/index.cfm?doc_id=1863) ** zufällig eine Primzahl ist? – sehe

+1

Um die Primzahl zu finden, können Sie das Sieb von Eratosthenes verwenden. –

Antwort

2

ändern

for (i = 0; i <= n; i++) 

zu

for (i = 1; i <= n; i++) 
+0

yup ich bekomme Ergebnis, aber wie diese "Primzahl sind" nicht Drucknummer ?? –

+1

@SyedRaza müssen Sie Ihre Druckzeile ändern, um den Parameter einzuschließen. '' Console.WriteLine ("Die Primzahlen sind {0}", a); " – luketorjussen

13

Wenn i Null ist, zum ersten Mal um die Schleife Sie 0 % 0 tun was zu einem Fehler durch Division durch Null führt.

Was Ihre Funktion zu tun versucht, habe ich keine Ahnung. Ich sehe hier nichts, was mit Primzahlen zusammenhängt. Sie finden einfach alle geraden Zahlen kleiner als n.

Schauen wir uns die if Test einen Blick:

if ((i % 2 == 0) && (i % i == 0)) 

Der zweite Teil, i % i == 0 immer so lange wahr sein wird, wie i nicht 0 ist. Dieser Teil ist also falsch. Und i % 2 == 0 testet einfach, ob i gerade ist oder nicht.

Was beabsichtigt Ihr Code eigentlich? Versuchen Sie zu testen, ob eine Zahl prim ist oder nicht? Wenn ja, ist der einfachste Ansatz wie folgt aus:

static bool isPrime(int n) 
{ 
    Debug.Assert(n>0); 
    for (int i=2; i<n; i++) 
     if (n % i == 0) // n is exactly divisible by i, so n is not prime 
      return false; 
    return true; // we could not find a factor, so n must be prime 
} 

Sie aktuelle Code nicht ausgeben kann keine Zahlen, da auf Ihren Anruf Console.WriteLine ist nicht ganz richtig. Suchen Sie nach:

Console.WriteLine("The prime numbers are: {0}", a); 

Der andere Punkt ist, dass Ihre Version des Codes den Primzahltest mit dem I/O-Code gemischt. Wenn Sie alles in einer einzigen großen Routine mischen, ist es für Sie schwieriger, den Code zu verstehen und zu debuggen. Teilen Sie den Primalitätstest in eine separate Funktion auf, wie ich es hier illustriere, und Sie können seine Richtigkeit leichter überprüfen. Sobald Sie wissen, dass es korrekt ist, können Sie es aus Ihrem IO-Code verwenden. Und dann können Sie sich darauf konzentrieren, Ihren IO-Code korrekt zu machen. Welche etwa wie folgt aussehen könnte:

Console.Write("Enter your number: "); 
int n = Convert.ToInt32(Console.ReadLine()); 
Console.WriteLine("The prime numbers are:"); 
for (int i = 1; i <= n; i++) 
    if (isPrime(i)) 
     Console.WriteLine(i); 
Console.ReadLine(); 
+1

Das ist das größte Problem, das jeder vermisst hat: Primzahlen sind nicht nur nicht durch 2 teilbar ... – MPelletier

+0

@MPelletier In der Tat, 9 ist nicht teilbar durch 2 –

+2

für mehr Leistung sollte man sich überlegen, nur 'i Snicksie

1

Nun, wenn ich gleich 0 ist, Sie versuchen, 0%0 zu berechnen, was in der Tat eine Division durch Null versucht wird.

Wie auch immer, außer wenn ich 0 bin, ist% i immer 0. Das ist kaum der Weg, um Primzahlen zu berechnen.

0

Es ist offensichtlich, weil Sie Schleife von 0 beginnen, sollten Sie Ihre Schleife von 1.

1

% ist der Modulo-Operator beginnen. Es gibt den Rest der Teilung zwischen den zwei Zahlen.

(i % 2) == 0 

wird testen, ob i gerade ist.

(i % i) == 0 

kehrt immer true für i > 0, weil i/i = 1 remainder 0. Wenn i0 ist, erhalten Sie eine Ausnahme durch Division durch Null, weil Sie versuchen, 0/0 auszuwerten.

(siehe auch: http://msdn.microsoft.com/en-us/library/0w4e0fzs.aspx)

Um zu bestimmen, ob i Primzahl ist, würden Sie sicherstellen möchten, dass i ist nicht teilbar durch alle ganzen Zahlen 2-floor(i/2).

0

Ein Kinderprogramm zu finden prime in C

ist
#include<stdio.h> 

main() 
{ 
    int n, c = 2; 

    printf("Enter a number to check if it is prime\n"); 
    scanf("%d",&n); 

    for (c = 2 ; c <= n - 1 ; c++) 
    { 
     if (n%c == 0) 
     { 
     printf("%d is not prime.\n", n); 
    break; 
     } 
    } 
    if (c == n) 
     printf("%d is prime.\n", n); 

    return 0; 
} 

Wenn Sie für die Prime werden Überprüfung nicht: das Überprüfen Sie, was die prime numbers sind.

Prime number are those which will not divided by any number except 1 and itself. 

Durch die Anweisung sollte Ihre Überprüfung Zahl von 2 bis N-1 starten.

bool isPrime = true; 
      int number = Convert.ToInt32(Console.Read()); 
      int i = 2; 
      while (i < number) 
      { 
       if (number % i == 0) 
       { 
        isPrime = false; 
        break; 
       } 
       i++; 
      } 

      if (isPrime) 
      { 
       //Prime number 
      } 
      else 
      { 
       //Not Prime No 
      } 

prüft this wissen, wie zwischen einem gewissen Bereich von 1 Primzahlen erzeugen - 100 usw. zu tun, so dass Sie in einem anderen Zählschleife prime Prüfung Schleife setzen.

Verwandte Themen