C# :: Aufgabe #58

11 Lösungen Lösungen öffentlich

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.

Lösungen:

vote_ok
von pocki (4190 Punkte) - 01.03.2014 um 21:19 Uhr
Eine einfache Lösung:
Quellcode ausblenden 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;
}
vote_ok
von wladi-g (1310 Punkte) - 31.03.2014 um 12:24 Uhr
Quellcode ausblenden C#-Code
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;
        }
    }
}

2 Kommentare
vote_ok
von Gisbert5020 (3120 Punkte) - 02.05.2014 um 14:40 Uhr
Quellcode ausblenden C#-Code

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();
        }
    }
}
vote_ok
von syzon (410 Punkte) - 21.08.2014 um 13:39 Uhr
Quellcode ausblenden C#-Code
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();
            }
        }
    }

vote_ok
von Thund3rC4k3 (130 Punkte) - 06.09.2014 um 14:56 Uhr
Quellcode ausblenden C#-Code
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();
        }
    }
}
vote_ok
von eulerscheZhl (5230 Punkte) - 06.03.2015 um 08:45 Uhr
Da noch keiner das Sieb des Eratosthenes verwendet hat, hier meine Lösung:
Quellcode ausblenden 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);
				}
			}
		}
	}
}
vote_ok
von Torbo (880 Punkte) - 01.06.2015 um 13:46 Uhr
Quellcode ausblenden C#-Code
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();
        }
    }
}
vote_ok
von niknik (1230 Punkte) - 13.08.2015 um 13:14 Uhr
Sieb von Eratosthenes

Quellcode ausblenden 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();
        }
    }
}
vote_ok
von sasanaf (100 Punkte) - 03.02.2016 um 11:57 Uhr
Quellcode ausblenden C#-Code
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();
        }
    }
}
vote_ok
von stbehl (1640 Punkte) - 12.02.2018 um 14:40 Uhr
Quellcode ausblenden C#-Code
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();
        }
    }
}
vote_ok
von stcalvin (970 Punkte) - 15.02.2018 um 11:41 Uhr
Quellcode ausblenden C#-Code
        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;
            }
        }
2107354

Du scheinst einen AdBlocker zu nutzen. Ich würde mich freuen, wenn du ihn auf dieser Seite deaktivierst und dich davon überzeugst, dass die Werbung hier nicht störend ist.