Liczby parzyste i nieparzyste


Tematy pokrewne   Podrozdziały
Przedziały liczbowe i liczby
Liczby parzyste i nieparzyste
Liczby podzielne lub niepodzielne przez zadane podzielniki
Ciągi arytmetyczne
NWD – algorytm Euklidesa
Liczby względnie pierwsze
Najmniejsza wspólna wielokrotność
Odwrotność modulo – rozszerzony algorytm Euklidesa
Liczby pierwsze – generacja przez sprawdzanie podzielności
Liczby pierwsze – generacja sitem Eratostenesa
Liczby pierwsze – generacja sitem liniowym
Liczby pierwsze – generacja sitem Atkina-Bernsteina
Czynniki pierwsze – metoda próbnych dzieleń
Czynniki pierwsze – metoda Fermata
Pierwszość liczby naturalnej – algorytmy naiwne
Pierwszość liczby naturalnej – Chiński Test Pierwszości
Pierwszość liczby naturalnej – Małe Twierdzenie Fermata
Pierwszość liczby naturalnej – test Millera-Rabina
Liniowe generatory liczb pseudolosowych
Generator pseudolosowy Park-Miller
Generator pseudolosowy Mersenne Twister
Wbudowane generatory liczb pseudolosowych
Generowanie liczb pseudolosowych
Liczby Fibonacciego
System liczbowy Fibonacciego
Całkowity pierwiastek kwadratowy
  Liczby parzyste
Liczby nieparzyste

 

Problem

W przedziale całkowitym <a,b> wyszukaj wszystkie liczby parzyste.

 

 

Liczby parzyste

W wielu algorytmach musimy wygenerować liczby parzyste z zadanego przedziału <a,b> liczb całkowitych. Tego typu zadanie rozwiązujemy stosując podejście nr 2. Ponieważ granice przedziału a i b mogą być dowolnymi liczbami całkowitymi, musimy najpierw znaleźć najmniejszą liczbę parzystą z przedziału <a,b>.

  1. Jeśli a jest parzyste, to najmniejszą liczbą parzystą w tym przedziale będzie właśnie a.
  2. Jeśli a nie jest parzyste, to najmniejszą liczbą parzystą będzie a + 1.

Parzystość a sprawdzimy badając resztę z dzielenia a przez 2. Jeśli reszta jest zerowa, to a jest liczbą parzystą. Jeśli a nie jest liczbą parzystą, to

  1. Reszta wynosi 1 dla a > 0
  2. Reszta wynosi -1 dla a < 0

Z powyższego wnioskujemy, iż pierwszą liczbę parzystą w przedziale całkowitym <a,b> otrzymamy następująco:

 

i = a
Jeśli reszta z dzielenia a przez 2 jest różna od 0, to zwiększ i o 1

 

Następna liczba parzysta jest zawsze o 2 większa. Podsumowując otrzymujemy następujący, prosty algorytm generacji liczb parzystych w przedziale całkowitym <a,b>:

 

Algorytm generacji liczb parzystych

Wejście
a     początek przedziału, a Z
b  – koniec przedziału, b Z, a < b
Wyjście:

Kolejne liczby parzyste zawarte w przedziale <a,b>

Zmienna pomocnicza

i – przebiega przez kolejne liczby parzyste w przedziale <a,b>,  i Z

Lista kroków:
K01: ia ; obliczamy pierwszą liczbę parzystą
K02: Jeśli a mod 2 ≠ 0, to ii + 1  
K03: Dopóki ib, wykonuj kroki K03...K04 ; generujemy liczby parzyste w przedziale <a,b>
K04:     Pisz i ; wyprowadzamy liczbę parzystą
K05:     ii + 2 ; następna liczba parzysta
K06: Zakończ  

 

Program

Ważne:

Zanim uruchomisz program, przeczytaj wstęp do tego artykułu, w którym wyjaśniamy funkcje tych programów oraz sposób korzystania z nich.

 

Program spodziewa się w pierwszym wierszu liczb a i b. W kolejnych wierszach wyświetla liczby parzyste zawarte w przedziale <a,b>.

 

Lazarus Code::Blocks Free Basic
// Liczby parzyste
// Data   : 11.03.2008
// (C)2012 mgr Jerzy Wałaszek
//----------------------------

program prg;

var a,b,i : longint;

begin
  readln(a,b);
  i := a;
  if(a mod 2 <> 0) then inc(i);
  while(i <= b) do
  begin
    write(i,' ');
    inc(i,2);
  end;
  writeln;
end.
// Liczby parzyste
// Data   : 11.03.2008
// (C)2012 mgr Jerzy Wałaszek
//----------------------------

#include <iostream>

using namespace std;

int main()
{
  int a,b,i;

  cin >> a >> b;
  i = a;
  if(a % 2) i++;
  while(i <= b)
  {
    cout << i << " ";
    i += 2;        
  }
  cout << endl;
  return 0;
}

 

' Liczby parzyste
' Data   : 11.03.2008
' (C)2012 mgr Jerzy Wałaszek
'----------------------------

Dim As Integer a,b,i

Input a, b
i = a
If a Mod 2 Then i += 1
While i <= b
  Print i; " ";
  i += 2
Wend
Print
End

 

Wynik
  -3 15
-2 0 2 4 6 8 10 12 14
 
 

Liczby parzyste
(C)2012 mgr Jerzy Wałaszek

a = , b =


...

 

Liczby nieparzyste

Liczby nieparzyste generujemy w identyczny sposób: wyznaczamy pierwszą liczbę nieparzystą w przedziale <a,b>, a kolejne są o 2 większe. Jeśli a jest nieparzyste, to pierwsza liczba nieparzysta jest równa a, w przeciwnym razie jest o 1 większa.

Poniższy program czyta krańce przedziału a, b i wyświetla wszystkie kolejne liczby nieparzyste zawarte w tym przedziale.

 

Program

Ważne:

Zanim uruchomisz program, przeczytaj wstęp do tego artykułu, w którym wyjaśniamy funkcje tych programów oraz sposób korzystania z nich.

 

Program spodziewa się w pierwszym wierszu liczb a i b.

 

Lazarus Code::Blocks Free Basic
// Liczby nieparzyste
// Data   : 11.03.2008
// (C)2012 mgr Jerzy Wałaszek
//----------------------------

program prg;

var a,b,i : longint;

begin
  readln(a,b);
  i := a;
  if(a mod 2 = 0) then inc(i);
  while(i <= b) do
  begin
    write(i,' ');
    inc(i,2);
  end;
  writeln;
end.
// Liczby nieparzyste
// Data   : 11.03.2008
// (C)2012 mgr Jerzy Wałaszek
//----------------------------

#include <iostream>

using namespace std;

int main()
{
  int a,b,i;

  cin >> a >> b;
  i = a;
  if(a % 2 == 0) i++;
  while(i <= b)
  {
    cout << i << " ";
    i += 2;        
  }
  cout << endl;
  return 0;
}

 

' Liczby nieparzyste
' Data   : 11.03.2008
' (C)2012 mgr Jerzy Wałaszek
'----------------------------

Dim As Integer a,b,i

Input a, b
i = a
If a Mod 2 = 0 Then i += 1
While i <= b
  Print i; " ";
  i += 2
Wend
Print
End

 

Wynik
  -10 10
-9 -7 -5 -3 -1 1 3 5 7 9
 

 

Liczby nieparzyste
(C)2012 mgr Jerzy Wałaszek

a = , b =


...

 



List do administratora Serwisu Edukacyjnego Nauczycieli I LO

Twój email: (jeśli chcesz otrzymać odpowiedź)
Temat:
Uwaga: ← tutaj wpisz wyraz  ilo , inaczej list zostanie zignorowany

Poniżej wpisz swoje uwagi lub pytania dotyczące tego rozdziału (max. 2048 znaków).

Liczba znaków do wykorzystania: 2048

 

W związku z dużą liczbą listów do naszego serwisu edukacyjnego nie będziemy udzielać odpowiedzi na prośby rozwiązywania zadań, pisania programów zaliczeniowych, przesyłania materiałów czy też tłumaczenia zagadnień szeroko opisywanych w podręcznikach.



   I Liceum Ogólnokształcące   
im. Kazimierza Brodzińskiego
w Tarnowie

©2017 mgr Jerzy Wałaszek

Dokument ten rozpowszechniany jest zgodnie z zasadami licencji
GNU Free Documentation License.