C# :: Aufgabe #58
11 Lösungen

Alle Primzahlen bis zu einem Maximalwert ermitteln
Anfänger - C#
von devnull
- 26.02.2014 um 18:36 Uhr
Es soll ein Programm geschrieben werden, welches alle Primzahlen im Bereich von 2 bis zu einem Maximalwert sucht und auf der Konsole ausgibt.
Den Maximalwert soll der Benutzer beim Programmaufruf auf der Kommandozeile angeben können.
Der Algorithmus zur Primzahlensuche ist frei wählbar.
Den Maximalwert soll der Benutzer beim Programmaufruf auf der Kommandozeile angeben können.
Der Algorithmus zur Primzahlensuche ist frei wählbar.
Lösungen:
Eine einfache Lösung:
C#-Code

public void Main() { System.Console.Write("Maximalwert eingeben: "); var max = long.Parse(System.Console.ReadLine()); if (max < 2) return; System.Console.WriteLine(2); for (int i = 3; i <= max; i+=2) { if (IsPrime(i)) { System.Console.WriteLine(i); } } System.Console.ReadKey(); } public static bool IsPrime(long num) { bool bPrime = true; int i = 0; for (i = 2; i <= Math.Sqrt(num)+1; i++) { if ((num % i) == 0) { bPrime = false; break; } } return bPrime; }

using System; using System.Collections.Generic; namespace Primzahlen { class Primzahlen { static void Main(string[] args) { List<int> list = new List<int>(); Console.WriteLine("Primzahlen im Bereich von 2 bis Maximalwert"); Console.Write("Geben Sie einen Maximalwert(integer) ein: "); int eingabe = Eingabe(Console.ReadLine()); list.Add(2); for(int i = 3; i <= eingabe; i++) { if (ZahlAufTeilerTesten(i) == true) { list.Add(i); } } Console.WriteLine("Die Primzahlen im Bereich 2 bis " + eingabe + ":"); foreach (int i in list) { Console.WriteLine(i); } Console.Read(); } public static int Eingabe(string text) { try { int maximalwert = Convert.ToInt32(text); if (maximalwert < 2) { Console.Write("Wert kleiner 2.\nBitte einen Maximalwert eingeben: "); return Eingabe(Console.ReadLine()); } else { return maximalwert; } } catch { Console.Write("Der Wert konnt nicht gelesen werden.\nBitte geben Sie einen Maximalwert ein: "); return Eingabe(Console.ReadLine()); } } public static bool ZahlAufTeilerTesten(int zahl) { for (int i = 2; i < zahl; i++) { if (zahl % i == 0) { return false; } } return true; } } }

using System; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { Console.WriteLine("Geben Sie eine Zahl ein, bis zu der die Primzahlen berechnet werden:"); int zahl = Convert.ToInt16(Console.ReadLine()); for (int i = 1; i <= zahl; i++) { int erg = i % 2; if (erg == 0 & i != 2) continue; erg = i % 3; if (erg == 0 & i != 3) continue; erg = i % 5; if (erg == 0 & i != 5) continue; erg = i % 7; if (erg == 0 & i != 7) continue; Console.Write(i + " "); } Console.ReadLine(); } } }

using System; using System.Collections; namespace Primzahlen { class Primzahlen { static void Main(string[] args) { ArrayList zahlenliste = new ArrayList(); ArrayList ergebnisliste = new ArrayList(); int ZahlInZahlenliste = 2; Console.WriteLine("Bitte Maximalwert eingeben"); int max = Convert.ToInt32(Console.ReadLine()); //Zahlenliste initialisieren for (int i = 0; i < max - 1; i++) { zahlenliste.Insert(i, ZahlInZahlenliste); ZahlInZahlenliste = ZahlInZahlenliste + 1; } for (int i = 0; i < zahlenliste.Count; i++) { bool isPrime = true; if ((Convert.ToInt32(zahlenliste[i]) == 2)) { ergebnisliste.Add(Convert.ToInt32(zahlenliste[i])); continue; } for (int j = 0; j < i; j++) { if ((Convert.ToInt32(zahlenliste[i]) % Convert.ToInt32(zahlenliste[j])) == 0) { isPrime = false; break; } } if (isPrime == true) { bool AktuelleZahlInErgebnisliste = false; for (int z = 0; z < ergebnisliste.Count; z++) { if (Convert.ToInt32(zahlenliste[i]) == Convert.ToInt32(ergebnisliste[z])) { AktuelleZahlInErgebnisliste = true; } } if (AktuelleZahlInErgebnisliste == false) { ergebnisliste.Add(Convert.ToInt32(zahlenliste[i])); } } } //Ausgabe Console.WriteLine("Die Primzahlen sind: "); for (int y = 0; y < ergebnisliste.Count; y++) { Console.WriteLine(ergebnisliste[y]); } Console.ReadLine(); } } }

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Primzahlausgebung { class Program { static void Main(string[] args) { int zahl = 2; int anzahl = 0; Console.WriteLine("Geben Sie ein bis zu welcher Zahl Primzahlen gerneriert werden sollen:"); int ende = Convert.ToInt32(Console.ReadLine()); Console.WriteLine("Drücken Sie zum Starten ENTER..."); Console.ReadLine(); for (int i = 2; i < ende; i++) { bool prim = true; int teiler = 2; int rest = 0; int mal = zahl - 3; if (zahl % 2 == 0) { prim = false; } for (int j = 1; j < zahl - 3; j++) { rest = zahl % teiler; teiler = teiler + 1; if (rest == 0) { prim = false; } } if (zahl == 2) { prim = true; } if (prim == true) { Console.WriteLine(Convert.ToString(zahl)); anzahl++; } zahl++; } Console.WriteLine("Von 1 bis " + Convert.ToInt32(ende) + " gibt es " + Convert.ToInt32(anzahl) + " Primzahlen."); Console.ReadLine(); } } }
Da noch keiner das Sieb des Eratosthenes verwendet hat, hier meine Lösung:
C#-Code

using System; namespace trainYourProgrammer { class MainClass { public static void Main(string[] args) { Console.Write ("Primzahlen ermitteln bis: "); int max = int.Parse(Console.ReadLine ()); bool[] prime = new bool[max + 1]; //annehmen, dass alle Zahlen prim sind, bis das Gegenteil bewiesen ist for (int i = 2; i <= max; i++) { prime [i] = true; } for (int i = 2; i <= max; i++) { if (prime [i]) { for (int j = 2 * i; j <= max; j += i) { prime [j] = false; //j ist Vielfaches von i und daher nicht prim } } } for (int i = 2; i <= max; i++) { if (prime [i]) { Console.WriteLine (i); } } } } }

using System; namespace Primzahlen { class Program { static void Main(string[] args) { int start = 0; int end = Convert.ToInt32(Console.ReadLine()); if (start == 2) Console.WriteLine(2); if (start % 2 == 0) ++start; for (int i = start; i <= end; i += 2) { bool prime = true; for (int j = 3; j < i; ++j) { if (i % j == 0) { prime = false; break; } } if (prime && i >= 2) Console.WriteLine(i); } Console.ReadKey(); } } }
Sieb von Eratosthenes
C#-Code

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace SiebDesErasthotenes { class Program { public static List<int> Primzahlsucher(int n) { bool[] check = new bool[n]; List<int> prim = new List<int>(); for (int i = 0; i < n; i++) { check[i] = false; } for (int i = 2; i < (int)Math.Floor((decimal)Math.Sqrt(n)); i++) { if (!check[i]) { prim.Add(i); for (int j = i * i; j < n; j += i) { check[j] = true; } } } for (int i = (int)Math.Floor((decimal)Math.Sqrt(n)) + 1; i < n; i++) { if (!check[i]) { prim.Add(i); } } return prim; } static void Main(string[] args) { int number; do { Console.WriteLine("Bis zu welchem Maximalwert sollen alle Primzahlen gesucht werden?: "); } while (!int.TryParse(Console.ReadLine(), out number) || number < 2); List<int> primzahlen = Primzahlsucher(number); int zaehler = 1; foreach (int item in primzahlen) { Console.WriteLine("{0,5}.: {1,10}", zaehler++, item); } Console.ReadLine(); } } }

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { Console.WriteLine("Primzahl eingeben"); int EingabeDerPrimzahlX = Convert.ToInt32(Console.ReadLine()); int[] PrimzahlArray = new int[EingabeDerPrimzahlX]; int AktuelleArrayStelle = 0; int NumberToCheck = 2; while (AktuelleArrayStelle <= EingabeDerPrimzahlX - 1) { bool Primzahl = true; int WurzelDerPrimzahl = (int)Math.Sqrt(NumberToCheck) + 1; for (int x = 3; x <= WurzelDerPrimzahl; x++) { if (NumberToCheck % x == 0) { Primzahl = false; break; } } if (Primzahl) { PrimzahlArray[AktuelleArrayStelle] = NumberToCheck; //Console.WriteLine("Primzahl gefunden {0}", PrimzahlArray[AktuelleArrayStelle]); //if { } //Console.Clear(); if (AktuelleArrayStelle % 100 == 0) { // Console.WriteLine("Status der Berechnung bei {0:0.00}%.\nAktuellste Primzahl {1}", (Convert.ToDouble(AktuelleArrayStelle) / Convert.ToDouble(EingabeDerPrimzahlX)) * 100, PrimzahlArray[AktuelleArrayStelle]); // Console.SetCursorPosition(0, Console.CursorTop - 2); } AktuelleArrayStelle++; } if (NumberToCheck == 2) NumberToCheck++; else NumberToCheck += 2; } Console.Clear(); Console.WriteLine("Gesuchte Primzahl gefunden {0}", PrimzahlArray[EingabeDerPrimzahlX - 1]); Console.ReadLine(); } } }

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace TrainYourProgrammer58 { class Program { static void Main(string[] args) { Console.Write("Geben Sie den Maximalwert ein: "); int max = Convert.ToInt32(Console.ReadLine()); bool primzahl; for (int i = 2; i <= max; i++) { primzahl = true; for (int j = 2; j < i; j++) { if (i % j == 0) { primzahl = false; } } if (primzahl) { Console.Write(i + " "); } } Console.ReadKey(); } } }

static void Aufgabe_58() { int maximalwert; var liste = new ArrayList(); bool prime = true; Console.Write("Maximalwert der Primzahlen? "); maximalwert = Convert.ToInt32(Console.ReadLine()); for (int i = 2; i <= maximalwert; i++) { for (int k = 2; k <= Math.Sqrt(i); k++) { if (i % k == 0) { prime = false; } } if (prime) { Console.WriteLine(i); } prime = true; } }