C# :: Aufgabe #311
4 Lösungen

Konsolenanwendung zur Bestimmung der Primzahlen - Ganzzahlenbereich
Anfänger - C#
von Labi1995
- 19.04.2020 um 20:39 Uhr
Schreiben Sie eine Konsolenanwendung zur Bestimmung der Primzahlen in dem vom Nutzer eingegebenen Ganzzahlenbereich von Null bis n unter Verwendung des Siebs des Eratosthenes.
Wie viele Primzahlen gibt es im Zahlenbereich bis 100?
Wie viele Primzahlen gibt es im Zahlenbereich bis 10.000?
Wie viele Primzahlen gibt es im Zahlenbereich bis 1.000.000?
Wie viele Primzahlen gibt es im Zahlenbereich bis 100?
Wie viele Primzahlen gibt es im Zahlenbereich bis 10.000?
Wie viele Primzahlen gibt es im Zahlenbereich bis 1.000.000?
Lösungen:

using System; using System.Collections.Generic; namespace CS_Aufgabe_311_EratosthenesSieb { class Program { static void Main(string[] args) { int n = 1000000; Console.WriteLine($"{SieveEratosthenes(n)}"); } private static List<int> SieveEratosthenes(int n) { List<int> primes = new List<int>(); bool[] prime = new bool[n]; //Zuerst alle Zahlen von 2 bis n als Primzahl markieren for (int i = 2; i < n; i++) { prime[i] = true; } //Einzelner Abschnitt { //Wir wollen bei 2 anfangen int i = 2; //Alle Produkte des Teilers i //angefangen bei 2, bis kleiner n durchlaufen //Wenn n = 50, dann ist bei i = 7 Schluss, weil das Produkt = 49 ist for (; i * i < n; i++) { //Wenn die Zahl im Array als Primzahl markiert ist //Was bei den ersten beiden 2 und 3 definitiv der Fall ist if (prime[i]) { //Primzahl bis Wurzel(n) ausgeben Console.WriteLine(i); primes.Add(i); //Alle weiteren Produkte des Teilers i //angefangen beim Produkt i * i bis kleiner n durchlaufen //j wird mit i beim nächsten Durchlauf (Vielfaches) addiert for (int j = i * i; j < n; j += i) { //Dies kann unmöglich eine Primzahl sein //weil es ein Vielfaches von i ist. prime[j] = false; } } } //Alle Primzahlen ausgebene for (; i < n; i++) { if (prime[i]) { Console.WriteLine(i); primes.Add(i); } } } return primes; } } }
Hallo,
hier mein Lösungsvorschlag:
C#-Code
hier mein Lösungsvorschlag:

using System; namespace Aufgabe_311 { class Program { static void Main(string[] args) { int choice = 0; int target = 0; Console.WriteLine("Anzahl von Primzahlen \n"); Console.WriteLine("Bis zu welcher Zahl soll geprüft werden? "); Console.WriteLine("1 für 100"); Console.WriteLine("2 für 10.000"); Console.WriteLine("3 für 1.000.000\n"); Console.Write("Ihre Auswahl: "); choice = Convert.ToInt32(Console.ReadLine()); Console.Write("\n"); switch (choice) { case 1: target = 101; break; case 2: target = 10001; break; case 3: target = 1000001; break; default: target = 11; break; } int counter = 0; bool[] gestrichen = new bool[target]; for (int i = 0; i <= gestrichen.Length - 1; i++) { gestrichen[i] = false; } for (int i = 2; i <= Math.Sqrt(target - 1); i++) { if (!gestrichen[i]) { counter++; for (int j = 0; j < target; j += i) { gestrichen[j] = true; } } } for (int i = Convert.ToInt32(Math.Sqrt(target) + 1); i < target; i++) { if (!gestrichen[i]) { counter++; } } Console.WriteLine("Es gibt {0} Primzahlen", counter); } } }

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Primzahlen { class Program { static void Main(string[] args) { Console.WriteLine("Bis zu welcher Zahl sollen die Primzahlen bestimmt werden?"); int Zahl = Convert.ToInt32(Console.ReadLine()); int Ausgabe = Zahl; bool merker = true; int Rechner = 2; ; int i = Zahl; int counter = 0; Console.WriteLine("Die Primzahlen sind:"); while (Rechner > 0 && i > 1) { merker = true; while (merker == true) { i--; Rechner = Zahl; Rechner %= i; if (Rechner == 0) { merker = false; Zahl--; i = Zahl; Rechner = Zahl; if (Zahl == 1) { Console.WriteLine(Zahl += 1); counter++; } } if (i == 2) { merker = true; counter++; Console.Write(Zahl + " "); Zahl--; i = Zahl; } } } Console.WriteLine($"Bis {Ausgabe} gibt es {counter} Primzahlen."); Console.ReadLine(); } } }
// NET Core 3.x
C#-Code

using System; using System.Linq; namespace CS_Aufgabe_311_Primzahlen { class Program { static void Main(string[] args) { for (int i = 100; i <= 1_000_000; i*=100) Console.WriteLine($"Primzahlen bis {i}: {Enumerable.Range(1, i).Where(x => IsPrime(x)).Count()}"); } static bool IsPrime(int n) => n switch { 2 => true, var k when k > 2 => !Enumerable.Range(2, (int)Math.Ceiling(Math.Sqrt(n)) - 1).Any(x => n % x == 0), _ => false }; } }