Gå til indholdet

N294 Udvidelse af LINQ med en “alle primtal”

I denne opgave skal du udvide LINQ’s funktionalitet med en metode til at filtrere primtal fra en liste af tal. Du skal skabe en tom konsol-applikation og tilføje en klasse kaldet PrimtalExtensions. I denne klasse skal du implementere en statisk metode AllePrimtal, der tager en IEnumerable<int> som input og returnerer en ny liste, der kun indeholder primtal.

Det skal fungere således:

List<int> talListe = new List<int> { 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 };
var primtal = talListe.AllePrimtal();

og du kan evt benytte denne (ikke optimerede) metode til at finde primtal:

bool ErPrimtal(int tal)
{
    if (tal <= 1) return false;
    if (tal == 2) return true;
    if (tal % 2 == 0) return false;

    var grænse = (int)Math.Floor(Math.Sqrt(tal));

    for (int i = 3; i <= grænse; i += 2)
    {
        if (tal % i == 0) return false;
    }

    return true;
}
Klik for at se et forslag til en løsning
List<int> talListe = new List<int> { 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 };
var primtal = talListe.AllePrimtal();

foreach (var tal in primtal)
{
    Console.WriteLine(tal);
}

public static class PrimtalExtensions
{
    public static IEnumerable<int> AllePrimtal(this IEnumerable<int> tal)
    {
        return tal.Where(ErPrimtal);
    }

    private static bool ErPrimtal(int tal)
    {
        if (tal <= 1) return false;
        if (tal == 2) return true;
        if (tal % 2 == 0) return false;

        var grænse = (int)Math.Floor(Math.Sqrt(tal));

        for (int i = 3; i <= grænse; i += 2)
        {
            if (tal % i == 0) return false;
        }

        return true;
    }
}