Sito Eratostenesa – .NET Maui

Wykonaj program, który wskaże liczby pierwsze metodą sita Eratostenesa

1) LogikaSita/Logika.cs (Add → New Folder: LogikaSita → Add → Class: Logika.cs)

using System;
using System.Collections.Generic;

namespace SitoMaui.LogikaSita
{
    /// <summary>
    /// Najprostsza wersja Sita Eratostenesa (podręcznikowa).
    /// Zwraca listę liczb pierwszych ≤ 'zakres'.
    /// </summary>
    public static class Logika
    {
        public static List<int> SitoEratostenesa(int zakres)
        {
            var wynik = new List<int>();

            if (zakres < 2)
                return wynik; // brak liczb pierwszych

            int dokad = (int)Math.Floor(Math.Sqrt(zakres));

            // Tablica o rozmiarze (zakres + 1), indeksy = liczby
            int[] tablica = new int[zakres + 1];

            // Inicjuj tablicę: tablica[i] = i
            for (int i = 1; i <= zakres; i++)
                tablica[i] = i;

            // Sito: skreślamy wielokrotności
            for (int i = 2; i <= dokad; i++)
            {
                if (tablica[i] != 0) // i jeszcze nie skreślone
                {
                    int j = i + i;   // zaczynamy od 2*i
                    while (j <= zakres)
                    {
                        tablica[j] = 0; // skreśl
                        j += i;          // następna wielokrotność
                    }
                }
            }

            // Zbierz liczby pierwsze z tablicy (niezerowe od 2 wzwyż)
            for (int i = 2; i <= zakres; i++)
                if (tablica[i] != 0)
                    wynik.Add(tablica[i]);

            return wynik;
        }
    }
}

2) MainPage.xaml (Add → New Item… → .NET MAUI ContentPage (XAML): MainPage.xaml)

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage
    xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
    xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
    x:Class="SitoMaui.MainPage"
    Title="Sito Eratostenesa">

    <VerticalStackLayout Padding="20" Spacing="12">

        <Label Text="Sito Eratostenesa" FontSize="24" HorizontalOptions="Center" />

        <!-- Wejście: górna granica N -->
        <Entry x:Name="ZakresEntry" Placeholder="Podaj zakres (np. 100)" Keyboard="Numeric" />

        <!-- Obliczanie -->
        <Button Text="Oblicz liczby pierwsze" Clicked="Oblicz_Click" />

        <!-- Informacja pomocnicza -->
        <Label x:Name="InfoLabel" TextColor="Gray" />

        <!-- Wynik: lista liczb pierwszych -->
        <Editor x:Name="WynikEditor"
                IsReadOnly="True"
                AutoSize="TextChanges"
                Placeholder="Tutaj pojawi się wynik..." />

    </VerticalStackLayout>
</ContentPage>

3) MainPage.xaml.cs

using System;
using System.Linq;              // dla string.Join na IEnumerable
using SitoMaui.LogikaSita;      // używamy naszej logiki z folderu LogikaSita

namespace SitoMaui;

public partial class MainPage : ContentPage
{
    public MainPage()
    {
        InitializeComponent(); // tworzy kontrolki z XAML i łączy je z tą klasą
    }

    private void Oblicz_Click(object sender, EventArgs e)
    {
        // 1) Parsowanie i prosta walidacja N
        if (!int.TryParse(ZakresEntry.Text?.Trim(), out int zakres) || zakres < 2)
        {
            InfoLabel.Text = "Podaj poprawny zakres (liczba całkowita ≥ 2).";
            WynikEditor.Text = string.Empty;
            return;
        }

        // 2) Wywołanie algorytmu (osobna logika)
        var primes = Logika.SitoEratostenesa(zakres);

        // 3) Prezentacja wyników
        InfoLabel.Text = $"Liczb pierwszych ≤ {zakres}: {primes.Count}";
        WynikEditor.Text = string.Join(", ", primes);
    }
}

Jak to spiąć i uruchomić

Uruchom projekt (Windows/Android/iOS). Wpisz zakres, kliknij „Oblicz…”.

Utwórz folder LogikaSita, w nim plik Logika.cs (jak wyżej).

Upewnij się, że x:Class w MainPage.xaml to SitoMaui.MainPage, a namespace w MainPage.xaml.cs to SitoMaui.

W MainPage.xaml.cs jest using SitoMaui.LogikaSita; — to łączy UI z naszą klasą Logika.