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
using System;
using System.Collections.Generic;
using System.Linq;
namespace App
{
class Program
{
static void Main(string[] args)
{
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;
}
}
}