118 lines
3.4 KiB
Plaintext
118 lines
3.4 KiB
Plaintext
{
|
|
"cells": [
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"# Algorytm Euklidesa\n",
|
|
"\n",
|
|
"Algorytm Euklidesa służy do obliczania __NWD__ (największego wspólnego dzielnika) dwóch liczb całkowitych.\n",
|
|
"Został opisany przez greckiego matematyka, **Euklidesa** w jego dziele **„Elementy”**, około trzysetnego roku przed naszą erą, co sprawia, że jest jednym z najstarszych, wciąż używanych algorytmów numerycznych.\n",
|
|
"\n",
|
|
"## Algorytm\n",
|
|
"\n",
|
|
"Aby obliczyć NWD(a,b), wykonujemy kolejno następujące kroki:\n",
|
|
"* Dzielimy z resztą liczbę a przez liczbę b\n",
|
|
" * jeżeli reszta jest równa 0, to NWD(a,b)=b\n",
|
|
" * jeżeli reszta jest różna od 0, to przypisujemy liczbie a wartość liczby b, liczbie b wartość otrzymanej reszty, a następnie wykonujemy ponownie punkt 1.\n",
|
|
" \n",
|
|
"### Przykład\n",
|
|
"\n",
|
|
"Wyznacz największy wspólny dzielnik liczb\n",
|
|
"\n",
|
|
"\n",
|
|
"\n",
|
|
"#### Program ilustrujący działanie algorytmu Eukldesa."
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 21,
|
|
"metadata": {
|
|
"scrolled": true
|
|
},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Podaj pierwszą liczbę całkowitą dodatnią: 55\n",
|
|
"Podaj drugą liczbę całkowitą dodatnią: 20\n",
|
|
"a = 55; b = 20\n",
|
|
"a = 35; b = 20\n",
|
|
"a = 20; b = 15\n",
|
|
"a = 15; b = 5\n",
|
|
"a = 10; b = 5\n",
|
|
"a = 5; b = 5\n",
|
|
"nNajwiększy wspólny dzielnik liczb 55 i 20 jest równy: 5\n"
|
|
]
|
|
},
|
|
{
|
|
"ename": "SystemExit",
|
|
"evalue": "0",
|
|
"output_type": "error",
|
|
"traceback": [
|
|
"An exception has occurred, use %tb to see the full traceback.\n",
|
|
"\u001b[1;31mSystemExit\u001b[0m\u001b[1;31m:\u001b[0m 0\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"def NWD(a, b):\n",
|
|
" while a != b:\n",
|
|
" a, b = max(a, b), min(a, b)\n",
|
|
" print(\"a = {a}; b = {b}\".format(a = a, b = b))\n",
|
|
" a = a - b\n",
|
|
" print(\"a = {a}; b = {b}\".format(a = a, b = b))\n",
|
|
" return a\n",
|
|
"\n",
|
|
"def main(args):\n",
|
|
" a = int(input(\"Podaj pierwszą liczbę całkowitą dodatnią: \"))\n",
|
|
" b = int(input(\"Podaj drugą liczbę całkowitą dodatnią: \"))\n",
|
|
" print(\"nNajwiększy wspólny dzielnik liczb {a} i {b} jest równy: {NWD}\".format(a = a, b = b, NWD = NWD(a, b)))\n",
|
|
" 50\n",
|
|
" \n",
|
|
" \n",
|
|
" return 0\n",
|
|
"\n",
|
|
"if __name__ == '__main__':\n",
|
|
" import sys\n",
|
|
" sys.exit(main(sys.argv))"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"metadata": {},
|
|
"source": [
|
|
"##### Strony z których kożystałem\n",
|
|
"[Obliczeniowo](https://www.obliczeniowo.com.pl/707)\n",
|
|
"\n",
|
|
"[Matemaks](https://www.matemaks.pl/algorytm-euklidesa.html).\n",
|
|
"\n",
|
|
"[Wikipedia](https://pl.wikipedia.org/wiki/Algorytm_Euklidesa).\n"
|
|
]
|
|
}
|
|
],
|
|
"metadata": {
|
|
"kernelspec": {
|
|
"display_name": "Python 3",
|
|
"language": "python",
|
|
"name": "python3"
|
|
},
|
|
"language_info": {
|
|
"codemirror_mode": {
|
|
"name": "ipython",
|
|
"version": 3
|
|
},
|
|
"file_extension": ".py",
|
|
"mimetype": "text/x-python",
|
|
"name": "python",
|
|
"nbconvert_exporter": "python",
|
|
"pygments_lexer": "ipython3",
|
|
"version": "3.8.5"
|
|
}
|
|
},
|
|
"nbformat": 4,
|
|
"nbformat_minor": 4
|
|
}
|