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.

