Primes and factors
This commit is contained in:
parent
c06354cdea
commit
d348ef22ce
444
luku21.tex
444
luku21.tex
|
@ -1,19 +1,19 @@
|
||||||
\chapter{Number theory}
|
\chapter{Number theory}
|
||||||
|
|
||||||
\index{lukuteoria@lukuteoria}
|
\index{number theory}
|
||||||
|
|
||||||
\key{Lukuteoria} on kokonaislukuja tutkiva
|
\key{Number theory} is a branch of mathematics
|
||||||
matematiikan ala, jonka keskeinen
|
that studies integers.
|
||||||
käsite on lukujen jaollisuus.
|
Number theory is a fascinating field,
|
||||||
Lukuteoriassa on kiehtovaa, että monet kokonaislukuihin
|
because many questions involving integers
|
||||||
liittyvät kysymykset ovat hyvin vaikeita ratkaista,
|
are very difficult to solve even if they
|
||||||
vaikka ne saattavat näyttää päältä päin yksinkertaisilta.
|
seem simple at first glance.
|
||||||
|
|
||||||
Tarkastellaan esimerkkinä seuraavaa yhtälöä:
|
As an example, let's consider the following equation:
|
||||||
\[x^3 + y^3 + z^3 = 33\]
|
\[x^3 + y^3 + z^3 = 33\]
|
||||||
On helppoa löytää kolme reaalilukua $x$, $y$ ja $z$,
|
It's easy to find three real numbers $x$, $y$ and $z$
|
||||||
jotka toteuttavat yhtälön. Voimme valita
|
that satisfy the equation.
|
||||||
esimerkiksi
|
For example, we can choose
|
||||||
\[
|
\[
|
||||||
\begin{array}{lcl}
|
\begin{array}{lcl}
|
||||||
x = 3, \\
|
x = 3, \\
|
||||||
|
@ -21,152 +21,151 @@ y = \sqrt[3]{3}, \\
|
||||||
z = \sqrt[3]{3}.\\
|
z = \sqrt[3]{3}.\\
|
||||||
\end{array}
|
\end{array}
|
||||||
\]
|
\]
|
||||||
Sen sijaan kukaan ei tiedä, onko olemassa
|
However, nobody knows if there are any three
|
||||||
kolmea \emph{kokonaislukua} $x$, $y$ ja $z$,
|
\emph{integers} $x$, $y$ and $z$
|
||||||
jotka toteuttaisivat yhtälön, vaan kyseessä
|
that would satisfy the equation, but this
|
||||||
on avoin lukuteorian ongelma.
|
is an open problem in number theory.
|
||||||
|
|
||||||
Tässä luvussa tutustumme lukuteorian peruskäsitteisiin ja
|
In this chapter, we will focus on basic concepts
|
||||||
-algoritmeihin.
|
and algorithms in number theory.
|
||||||
Lähdemme liikkeelle lukujen jaollisuudesta,
|
We will start by discussing divisibility of numbers
|
||||||
johon liittyvät keskeiset algoritmit ovat
|
and important algorithms for primality testing
|
||||||
alkuluvun tarkastaminen sekä luvun jakaminen tekijöihin.
|
and factorization.
|
||||||
|
|
||||||
\section{Alkuluvut ja tekijät}
|
\section{Primes and factors}
|
||||||
|
|
||||||
\index{jaollisuus@jaollisuus}
|
\index{divisibility}
|
||||||
\index{jakaja@jakaja}
|
\index{factor}
|
||||||
\index{tekijx@tekijä}
|
\index{divisor}
|
||||||
|
|
||||||
Luku $a$ on luvun $b$ \key{jakaja} eli \key{tekijä},
|
|
||||||
jos $b$ on jaollinen $a$:lla.
|
|
||||||
Jos $a$ on $b$:n jakaja,
|
|
||||||
niin merkitään $a \mid b$,
|
|
||||||
ja muuten merkitään $a \nmid b$.
|
|
||||||
Esimerkiksi luvun 24 jakajat ovat 1, 2, 3, 4, 6, 8, 12 ja 24.
|
|
||||||
|
|
||||||
\index{alkuluku@alkuluku}
|
A number $a$ is a \key{factor} or \key{divisor} of a number $b$
|
||||||
\index{alkutekijxhajotelma@alkutekijähajotelma}
|
if $b$ is divisible by $a$.
|
||||||
|
If $a$ is a factor of $b$,
|
||||||
|
we write $a \mid b$, and otherwise we write $a \nmid b$.
|
||||||
|
For example, the factors of the number 24 are
|
||||||
|
1, 2, 3, 4, 6, 8, 12 and 24.
|
||||||
|
|
||||||
Luku $n$ on \key{alkuluku}, jos sen ainoat
|
\index{prime}
|
||||||
positiiviset jakajat ovat 1 ja $n$.
|
\index{prime decomposition}
|
||||||
Esimerkiksi luvut 7, 19 ja 41 ovat alkulukuja.
|
|
||||||
Luku 35 taas ei ole alkuluku, koska se voidaan
|
A number $n>1$ is a \key{prime}
|
||||||
jakaa tekijöihin $5 \cdot 7 = 35$.
|
if its only positive factors are 1 and $n$.
|
||||||
Jokaiselle luvulle $n>1$ on olemassa yksikäsitteinen
|
For example, the numbers 7, 19 and 41 are primes.
|
||||||
\key{alkutekijähajotelma}
|
The number 35 is not a prime because it can be
|
||||||
|
divided into factors $5 \cdot 7 = 35$.
|
||||||
|
For each number $n>1$, there is a unique
|
||||||
|
\key{prime factorization}
|
||||||
\[ n = p_1^{\alpha_1} p_2^{\alpha_2} \cdots p_k^{\alpha_k},\]
|
\[ n = p_1^{\alpha_1} p_2^{\alpha_2} \cdots p_k^{\alpha_k},\]
|
||||||
missä $p_1,p_2,\ldots,p_k$ ovat alkulukuja
|
where $p_1,p_2,\ldots,p_k$ are primes and
|
||||||
ja $\alpha_1,\alpha_2,\ldots,\alpha_k$ ovat positiivisia
|
$\alpha_1,\alpha_2,\ldots,\alpha_k$ are positive numbers.
|
||||||
lukuja. Esimerkiksi luvun 84 alkutekijähajotelma on
|
For example, the prime factorization for the number 84 is
|
||||||
\[84 = 2^2 \cdot 3^1 \cdot 7^1.\]
|
\[84 = 2^2 \cdot 3^1 \cdot 7^1.\]
|
||||||
|
|
||||||
Luvun $n$ \key{jakajien määrä} on
|
The \key{number of factors} of a number $n$ is
|
||||||
\[\tau(n)=\prod_{i=1}^k (\alpha_i+1),\]
|
\[\tau(n)=\prod_{i=1}^k (\alpha_i+1),\]
|
||||||
koska alkutekijän $p_i$ kohdalla on $\alpha_i+1$
|
because for each prime $p_i$, there are
|
||||||
tapaa valita, montako kertaa alkutekijä
|
$\alpha_i+1$ ways to choose how many times
|
||||||
esiintyy jakajassa.
|
it appears in the factor.
|
||||||
Esimerkiksi luvun 84 jakajien määrä
|
For example, the number of factors
|
||||||
on $\tau(84)=3 \cdot 2 \cdot 2 = 12$.
|
of the number 84 is
|
||||||
Jakajat ovat
|
$\tau(84)=3 \cdot 2 \cdot 2 = 12$.
|
||||||
1, 2, 3, 4, 6, 7, 12, 14, 21, 28, 42 ja 84.
|
The factors are
|
||||||
|
1, 2, 3, 4, 6, 7, 12, 14, 21, 28, 42 and 84.
|
||||||
|
|
||||||
Luvun $n$ \key{jakajien summa} on
|
The \key{sum of factors} of $n$ is
|
||||||
\[\sigma(n)=\prod_{i=1}^k (1+p_i+\ldots+p_i^{\alpha_i}) = \prod_{i=1}^k \frac{p_i^{a_i+1}-1}{p_i-1},\]
|
\[\sigma(n)=\prod_{i=1}^k (1+p_i+\ldots+p_i^{\alpha_i}) = \prod_{i=1}^k \frac{p_i^{a_i+1}-1}{p_i-1},\]
|
||||||
missä jälkimmäinen muoto perustuu geometriseen summaan.
|
where the latter form is based on the geometric sum formula.
|
||||||
Esimerkiksi luvun 84 jakajien summa on
|
For example, the sum of factors of the number 84 is
|
||||||
\[\sigma(84)=\frac{2^3-1}{2-1} \cdot \frac{3^2-1}{3-1} \cdot \frac{7^2-1}{7-1} = 7 \cdot 4 \cdot 8 = 224.\]
|
\[\sigma(84)=\frac{2^3-1}{2-1} \cdot \frac{3^2-1}{3-1} \cdot \frac{7^2-1}{7-1} = 7 \cdot 4 \cdot 8 = 224.\]
|
||||||
|
|
||||||
Luvun $n$ \key{jakajien tulo} on
|
The \key{product of factors} of $n$ is
|
||||||
\[\mu(n)=n^{\tau(n)/2},\]
|
\[\mu(n)=n^{\tau(n)/2},\]
|
||||||
koska jakajista voidaan muodostaa
|
because we can form $\tau(n)/2$ pairs from the factors,
|
||||||
$\tau(n)/2$ paria, joiden jokaisen tulona on $n$.
|
each with product $n$.
|
||||||
Esimerkiksi luvun 84 jakajista muodostuvat parit
|
For example, the factors of the number 84
|
||||||
$1 \cdot 84$, $2 \cdot 42$, $3 \cdot 28$, jne.,
|
produce the pairs
|
||||||
ja jakajien tulo on $\mu(84)=84^6=351298031616$.
|
$1 \cdot 84$, $2 \cdot 42$, $3 \cdot 28$, etc.,
|
||||||
|
and the product of the factors is $\mu(84)=84^6=351298031616$.
|
||||||
|
|
||||||
%\index{tzydellinen luku@täydellinen luku}
|
\index{perfect number}
|
||||||
\index{txydellinen luku@täydellinen luku}
|
|
||||||
|
|
||||||
Luku $n$ on \key{täydellinen}, jos $n=\sigma(n)-n$
|
A number $n$ is \key{perfect} if $n=\sigma(n)-n$,
|
||||||
eli luku on yhtä suuri kuin summa sen jakajista
|
i.e., the number equals the sum of its divisors
|
||||||
välillä $1 \ldots n-1$.
|
between $1 \ldots n-1$.
|
||||||
Esimerkiksi luku 28 on täydellinen, koska
|
For example, the number 28 is perfect because
|
||||||
se muodostuu summana $1+2+4+7+14$.
|
it equals the sum $1+2+4+7+14$.
|
||||||
|
|
||||||
\subsubsection{Alkulukujen määrä}
|
\subsubsection{Number of primes}
|
||||||
|
|
||||||
On helppoa osoittaa, että alkulukuja on äärettömästi.
|
It is easy to show that there is an infinite number
|
||||||
Jos nimittäin alkulukuja olisi äärellinen määrä,
|
of primes.
|
||||||
voisimme muodostaa joukon $P=\{p_1,p_2,\ldots,p_n\}$,
|
If the number would be finite,
|
||||||
joka sisältää kaikki alkuluvut.
|
we could construct a set $P=\{p_1,p_2,\ldots,p_n\}$
|
||||||
Esimerkiksi $p_1=2$, $p_2=3$, $p_3=5$, jne.
|
that contains all the primes.
|
||||||
Nyt kuitenkin voisimme muodostaa uuden alkuluvun
|
For example, $p_1=2$, $p_2=3$, $p_3=5$, and so on.
|
||||||
\[p_1 p_2 \cdots p_n+1,\]
|
However, using this set, we could form a new prime
|
||||||
joka on kaikkia $P$:n lukuja suurempi.
|
\[p_1 p_2 \cdots p_n+1\]
|
||||||
Koska tätä lukua ei ole joukossa $P$,
|
that is larger than all elements in $P$.
|
||||||
syntyy ristiriita ja alkulukujen määrän on
|
This is a contradiction, and the number of the primes
|
||||||
pakko olla ääretön.
|
has to be infinite.
|
||||||
|
|
||||||
\subsubsection{Alkulukujen tiheys}
|
\subsubsection{Density of primes}
|
||||||
|
|
||||||
Alkulukujen tiheys tarkoittaa, kuinka usein alkulukuja
|
The density of primes means how often there are primes
|
||||||
esiintyy muiden lukujen joukossa.
|
among the numbers.
|
||||||
Merkitään funktiolla $\pi(n)$,
|
Let $\pi(n)$ denote the number of primes between
|
||||||
montako alkulukua on välillä $1 \ldots n$.
|
$1 \ldots n$. For example, $\pi(10)=4$ because
|
||||||
Esimerkiksi $\pi(10)=4$, koska välillä $1 \ldots 10$
|
there are 4 primes between $1 \ldots 10$: 2, 3, 5 and 7.
|
||||||
on alkuluvut 2, 3, 5 ja 7.
|
|
||||||
|
|
||||||
On mahdollista osoittaa, että
|
It's possible to show that
|
||||||
\[\pi(n) \approx \frac{n}{\ln n},\]
|
\[\pi(n) \approx \frac{n}{\ln n},\]
|
||||||
mikä tarkoittaa, että alkulukuja esiintyy
|
which means that primes appear quite often.
|
||||||
varsin usein. Esimerkiksi alkulukujen määrä
|
For example, the number of primes between
|
||||||
välillä $1 \ldots 10^6$ on $\pi(10^6)=78498$
|
$1 \ldots 10^6$ is $\pi(10^6)=78498$,
|
||||||
ja $10^6 / \ln 10^6 \approx 72382$.
|
and $10^6 / \ln 10^6 \approx 72382$.
|
||||||
|
|
||||||
\subsubsection{Konjektuureja}
|
\subsubsection{Conjectures}
|
||||||
|
|
||||||
Alkulukuihin liittyy useita \emph{konjektuureja}
|
There are many \emph{conjectures} involving primes.
|
||||||
eli lauseita, joiden uskotaan olevan tosia mutta
|
Most people think that the conjectures are true,
|
||||||
joita kukaan ei ole onnistunut todistamaan tähän mennessä.
|
but nobody has been able to prove them.
|
||||||
Kuuluisia konjektuureja ovat seuraavat:
|
For example, the following conjectures are famous:
|
||||||
|
|
||||||
\begin{itemize}
|
\begin{itemize}
|
||||||
\index{Goldbachin konjektuuri@Goldbachin konjektuuri}
|
\index{Goldbach's conjecture}
|
||||||
\item \key{Goldbachin konjektuuri}:
|
\item \key{Goldbach's conjecture}:
|
||||||
Jokainen parillinen kokonaisluku $n>2$ voidaan esittää
|
Each even integer $n>2$ can be represented as a
|
||||||
muodossa $n=a+b$ niin, että $a$ ja $b$
|
sum $n=a+b$ so that both $a$ and $b$ are primes.
|
||||||
ovat alkulukuja.
|
\index{twin prime}
|
||||||
\index{alkulukupari@alkulukupari}
|
\item \key{twin prime}:
|
||||||
\item \key{Alkulukuparit}:
|
There is an infinite number of pairs
|
||||||
On olemassa äärettömästi pareja muotoa $\{p,p+2\}$,
|
of the form $\{p,p+2\}$,
|
||||||
joissa sekä $p$ että $p+2$ on alkuluku.
|
where both $p$ and $p+2$ are primes.
|
||||||
\index{Legendren konjektuuri@Legendren konjektuuri}
|
\index{Legendre's conjecture}
|
||||||
\item \key{Legendren konjektuuri}:
|
\item \key{Legendre's conjecture}:
|
||||||
Lukujen $n^2$ ja $(n+1)^2$ välillä on aina alkuluku,
|
There is always a prime between numbers
|
||||||
kun $n$ on mikä tahansa positiivinen kokonaisluku.
|
$n^2$ and $(n+1)^2$, where $n$ is any positive integer.
|
||||||
\end{itemize}
|
\end{itemize}
|
||||||
|
|
||||||
\subsubsection{Perusalgoritmit}
|
\subsubsection{Basic algorithms}
|
||||||
|
|
||||||
Jos luku $n$ ei ole alkuluku,
|
If a number $n$ is not prime,
|
||||||
niin sen voi esittää muodossa $a \cdot b$,
|
it can be represented as a product $a \cdot b$,
|
||||||
missä $a \le \sqrt n$ tai $b \le \sqrt n$,
|
where $a \le \sqrt n$ or $b \le \sqrt n$,
|
||||||
minkä ansiosta sillä on varmasti
|
so it certainly has a factor between $2 \ldots \sqrt n$.
|
||||||
tekijä välillä $2 \ldots \sqrt n$.
|
Using this observation, we can both test
|
||||||
Tämän havainnon avulla voi tarkastaa ajassa $O(\sqrt n)$,
|
if a number is prime and find the prime factorization
|
||||||
onko luku alkuluku,
|
of a number in $O(\sqrt n)$ time.
|
||||||
sekä myös selvittää ajassa $O(\sqrt n)$
|
|
||||||
luvun alkutekijät.
|
|
||||||
|
|
||||||
Seuraava funktio \texttt{alkuluku} tutkii,
|
The following function \texttt{prime} checks
|
||||||
onko annettu luku $n$ alkuluku.
|
if the given number $n$ is prime.
|
||||||
Funktio koettaa jakaa lukua kaikilla luvuilla
|
The function tries to divide the number by
|
||||||
välillä $2 \ldots \sqrt n$, ja jos mikään
|
all numbers between $2 \ldots \sqrt n$,
|
||||||
luvuista ei jaa $n$:ää, niin $n$ on alkuluku.
|
and if none of them divides $n$, then $n$ is prime.
|
||||||
|
|
||||||
\begin{lstlisting}
|
\begin{lstlisting}
|
||||||
bool alkuluku(int n) {
|
bool prime(int n) {
|
||||||
if (n < 2) return false;
|
if (n < 2) return false;
|
||||||
for (int x = 2; x*x <= n; x++) {
|
for (int x = 2; x*x <= n; x++) {
|
||||||
if (n%x == 0) return false;
|
if (n%x == 0) return false;
|
||||||
|
@ -176,17 +175,17 @@ bool alkuluku(int n) {
|
||||||
\end{lstlisting}
|
\end{lstlisting}
|
||||||
|
|
||||||
\noindent
|
\noindent
|
||||||
Seuraava funktio \texttt{tekijat} muodostaa
|
The following function \texttt{factors}
|
||||||
vektorin, joka sisältää luvun $n$
|
constructs a vector that contains the prime
|
||||||
alkutekijät.
|
factorization of $n$.
|
||||||
Funktio jakaa $n$:ää sen alkutekijöillä ja lisää
|
The function divides $n$ by its prime factors,
|
||||||
niitä samaan aikaan vektoriin.
|
and adds them to the vector.
|
||||||
Prosessi päättyy, kun jäljellä on luku $n$,
|
The process ends when the remaining number $n$
|
||||||
jolla ei ole tekijää välillä $2 \ldots \sqrt n$.
|
has no factors between $2 \ldots \sqrt n$.
|
||||||
Jos $n>1$, se on alkuluku ja viimeinen tekijä.
|
If $n>1$, it is prime and the last factor.
|
||||||
|
|
||||||
\begin{lstlisting}
|
\begin{lstlisting}
|
||||||
vector<int> tekijat(int n) {
|
vector<int> factors(int n) {
|
||||||
vector<int> f;
|
vector<int> f;
|
||||||
for (int x = 2; x*x <= n; x++) {
|
for (int x = 2; x*x <= n; x++) {
|
||||||
while (n%x == 0) {
|
while (n%x == 0) {
|
||||||
|
@ -199,42 +198,36 @@ vector<int> tekijat(int n) {
|
||||||
}
|
}
|
||||||
\end{lstlisting}
|
\end{lstlisting}
|
||||||
|
|
||||||
Huomaa, että funktio lisää jokaisen
|
Note that each prime factor appears in the vector
|
||||||
alkutekijän vektoriin
|
as many times as it divides the number.
|
||||||
niin monta kertaa, kuin kyseinen
|
For example, $24=2^3 \cdot 3$,
|
||||||
alkutekijä jakaa luvun.
|
so the result of the function is $[2,2,2,3]$.
|
||||||
Esimerkiksi $24=2^3 \cdot 3$,
|
|
||||||
joten funktio muodostaa vektorin $[2,2,2,3]$.
|
|
||||||
|
|
||||||
\subsubsection{Eratostheneen seula}
|
\subsubsection{Sieve of Eratosthenes}
|
||||||
|
|
||||||
\index{Eratostheneen seula@Eratostheneen seula}
|
\index{sieve of Eratosthenes}
|
||||||
|
|
||||||
\key{Eratostheneen seula} on esilaskenta-algoritmi,
|
The \key{sieve of Eratosthenes} is a preprocessing
|
||||||
jonka suorituksen jälkeen mistä tahansa
|
algorithm that builds an array using which we
|
||||||
välin $2 \ldots n$ luvusta pystyy tarkastamaan
|
can efficiently check if a given number between $2 \ldots n$
|
||||||
nopeasti, onko se alkuluku,
|
is prime and find one prime factor of the number.
|
||||||
sekä etsimään yhden luvun alkutekijän,
|
|
||||||
jos luku ei ole alkuluku.
|
|
||||||
|
|
||||||
Algoritmi luo taulukon $\texttt{a}$,
|
The algorithm builds an array $\texttt{a}$
|
||||||
jossa on käytössä indeksit $2,3,\ldots,n$.
|
where indices $2,3,\ldots,n$ are used.
|
||||||
Taulukossa $\texttt{a}[k]=0$ tarkoittaa,
|
The value $\texttt{a}[k]=0$ means
|
||||||
että $k$ on alkuluku,
|
that $k$ is prime,
|
||||||
ja $\texttt{a}[k] \neq 0$ tarkoittaa,
|
and the value $\texttt{a}[k] \neq 0$
|
||||||
että $k$ ei ole alkuluku.
|
means that $k$ is not a prime but one
|
||||||
Jälkimmäisessä tapauksessa $\texttt{a}[k]$
|
of its prime factors is $\texttt{a}[k]$.
|
||||||
on yksi $k$:n alkutekijöistä.
|
|
||||||
|
|
||||||
Algoritmi käy läpi välin
|
The algorithm iterates through the numbers
|
||||||
$2 \ldots n$ luvut yksi kerrallaan.
|
$2 \ldots n$ one by one.
|
||||||
Aina kun vastaan tulee uusi alkuluku $x$,
|
Always when a new prime $x$ is found,
|
||||||
niin algoritmi merkitsee taulukkoon, että $x$:n moninkerrat
|
the algorithm records that the multiples
|
||||||
$2x,3x,4x,\ldots$ eivät ole alkulukuja,
|
of $x$ ($2x,3x,4x,\ldots$) are not primes
|
||||||
koska niillä on alkutekijä $x$.
|
because the number $x$ divides them.
|
||||||
|
|
||||||
Esimerkiksi jos $n=20$,
|
For example, if $n=20$, the array becomes:
|
||||||
taulukosta tulee:
|
|
||||||
|
|
||||||
\begin{center}
|
\begin{center}
|
||||||
\begin{tikzpicture}[scale=0.7]
|
\begin{tikzpicture}[scale=0.7]
|
||||||
|
@ -285,10 +278,10 @@ taulukosta tulee:
|
||||||
\end{tikzpicture}
|
\end{tikzpicture}
|
||||||
\end{center}
|
\end{center}
|
||||||
|
|
||||||
Seuraava koodi toteuttaa
|
The following code implements the sieve of
|
||||||
Eratostheneen seulan.
|
Eratosthenes.
|
||||||
Koodi olettaa, että jokainen taulukon \texttt{a}
|
The code assumes that each element in
|
||||||
alkio on aluksi 0.
|
\texttt{a} is initially zero.
|
||||||
|
|
||||||
\begin{lstlisting}
|
\begin{lstlisting}
|
||||||
for (int x = 2; x <= n; x++) {
|
for (int x = 2; x <= n; x++) {
|
||||||
|
@ -299,80 +292,85 @@ for (int x = 2; x <= n; x++) {
|
||||||
}
|
}
|
||||||
\end{lstlisting}
|
\end{lstlisting}
|
||||||
|
|
||||||
Algoritmin sisäsilmukka suoritetaan
|
The inner loop of the algorithm will be executed
|
||||||
$n/x$ kertaa tietyllä $x$:n arvolla,
|
$n/x$ times for any $x$.
|
||||||
joten yläraja algoritmin ajankäytölle
|
Thus, an upper bound for the running time
|
||||||
on harmoninen summa
|
of the algorithm is the harmonic sum
|
||||||
|
|
||||||
\index{harmoninen summa@harmoninen summa}
|
\index{harmonic sum}
|
||||||
|
|
||||||
\[\sum_{x=2}^n n/x = n/2 + n/3 + n/4 + \cdots + n/n = O(n \log n).\]
|
\[\sum_{x=2}^n n/x = n/2 + n/3 + n/4 + \cdots + n/n = O(n \log n).\]
|
||||||
|
|
||||||
Todellisuudessa algoritmi on vielä nopeampi,
|
In fact, the algorithm is even more efficient
|
||||||
koska sisäsilmukka suoritetaan vain,
|
because the inner loop will be executed only if
|
||||||
jos luku $x$ on alkuluku.
|
the number $x$ is prime.
|
||||||
Voidaan osoittaa, että algoritmin aikavaativuus
|
It can be shown that the time complexity of the
|
||||||
on vain $O(n \log \log n)$ eli hyvin lähellä vaativuutta $O(n)$.
|
algorithm is only $O(n \log \log n)$
|
||||||
|
that is very near to $O(n)$.
|
||||||
|
|
||||||
\subsubsection{Eukleideen algoritmi}
|
\subsubsection{Euclid's algorithm}
|
||||||
|
|
||||||
\index{suurin yhteinen tekijx@suurin yhteinen tekijä}
|
\index{greatest common divisor}
|
||||||
\index{pienin yhteinen moninkerta@pienin yhteinen moninkerta}
|
\index{least common multiple}
|
||||||
\index{Eukleideen algoritmi@Eukleideen algoritmi}
|
\index{Euclid's algorithm}
|
||||||
|
|
||||||
Lukujen $a$ ja $b$ \key{suurin yhteinen tekijä} eli $\textrm{syt}(a,b)$
|
The \key{greatest common divisor} of
|
||||||
on suurin luku, jolla sekä $a$ että $b$ on jaollinen.
|
numbers $a$ and $b$, $\gcd(a,b)$,
|
||||||
Lukujen $a$ ja $b$ \key{pienin yhteinen moninkerta} eli $\textrm{pym}(a,b)$
|
is the greatest number that divides both $a$ and $b$,
|
||||||
on puolestaan pienin luku, joka on jaollinen sekä $a$:lla että $b$:llä.
|
and the \key{least common multiple} of
|
||||||
Esimerkiksi $\textrm{syt}(24,36)=12$ ja
|
$a$ and $b$, $\textrm{lcm}(a,b)$,
|
||||||
$\textrm{pym}(24,36)=72$.
|
is the smallest number that is divisible by
|
||||||
|
both $a$ and $b$.
|
||||||
|
For example,
|
||||||
|
$\gcd(24,36)=12$ and
|
||||||
|
$\textrm{lcm}(24,36)=72$.
|
||||||
|
|
||||||
Suurimman yhteisen tekijän ja pienimmän yhteisen
|
The greatest common divisor and the least common multiple
|
||||||
moninkerran välillä on yhteys
|
are connected as follows:
|
||||||
\[\textrm{pym}(a,b)=\frac{ab}{\textrm{syt}(a,b)}.\]
|
\[\textrm{lcm}(a,b)=\frac{ab}{\textrm{gcd}(a,b)}\]
|
||||||
|
|
||||||
\key{Eukleideen algoritmi} on tehokas tapa etsiä
|
\key{Euclid's algorithm} provides an efficient way
|
||||||
suurin yhteinen tekijä.
|
to find the greatest common divisor of two numbers.
|
||||||
Se laskee suurimman yhteisen tekijän kaavalla
|
The algorithm is based on the formula
|
||||||
\begin{equation*}
|
\begin{equation*}
|
||||||
\textrm{syt}(a,b) = \begin{cases}
|
\textrm{gcd}(a,b) = \begin{cases}
|
||||||
a & b = 0\\
|
a & b = 0\\
|
||||||
\textrm{syt}(b,a \bmod b) & b \neq 0\\
|
\textrm{gcd}(b,a \bmod b) & b \neq 0\\
|
||||||
\end{cases}
|
\end{cases}
|
||||||
\end{equation*}
|
\end{equation*}
|
||||||
Esimerkiksi
|
For example,
|
||||||
\[\textrm{syt}(24,36) = \textrm{syt}(36,24)
|
\[\textrm{gcd}(24,36) = \textrm{gcd}(36,24)
|
||||||
= \textrm{syt}(24,12) = \textrm{syt}(12,0)=12.\]
|
= \textrm{gcd}(24,12) = \textrm{gcd}(12,0)=12.\]
|
||||||
Eukleideen algoritmin aikavaativuus
|
The time complexity of Euclid's algorithm
|
||||||
on $O(\log n)$, kun $n=\min(a,b)$.
|
is $O(\log n)$ where $n=\min(a,b)$.
|
||||||
Pahin tapaus algoritmille on, jos luvut ovat
|
The worst case is when
|
||||||
peräkkäiset Fibonaccin luvut.
|
$a$ and $b$ are successive Fibonacci numbers.
|
||||||
Silloin algoritmi käy läpi kaikki pienemmät
|
In this case, the algorithm goes through
|
||||||
peräkkäiset Fibonaccin luvut.
|
all smaller Fibonacci numbers.
|
||||||
Esimerkiksi
|
For example,
|
||||||
\[\textrm{syt}(13,8)=\textrm{syt}(8,5)
|
\[\textrm{gcd}(13,8)=\textrm{gcd}(8,5)
|
||||||
=\textrm{syt}(5,3)=\textrm{syt}(3,2)=\textrm{syt}(2,1)=\textrm{syt}(1,0)=1.\]
|
=\textrm{gcd}(5,3)=\textrm{gcd}(3,2)=\textrm{gcd}(2,1)=\textrm{gcd}(1,0)=1.\]
|
||||||
|
|
||||||
\subsubsection{Eulerin totienttifunktio}
|
\subsubsection{Euler's totient function}
|
||||||
|
|
||||||
\index{suhteellinen alkuluku@suhteellinen alkuluku}
|
\index{coprime}
|
||||||
\index{Eulerin totienttifunktio@Eulerin totienttifunktio}
|
\index{Euler's totient function}
|
||||||
|
|
||||||
Luvut $a$ ja $b$ ovat suhteelliset alkuluvut,
|
Numbers $a$ and $b$ are coprime
|
||||||
jos $\textrm{syt}(a,b)=1$.
|
if $\textrm{gcd}(a,b)=1$.
|
||||||
\key{Eulerin totienttifunktio} $\varphi(n)$
|
\key{Euler's totient function} $\varphi(n)$
|
||||||
laskee luvun $n$ suhteellisten alkulukujen
|
returns the number of coprime numbers to $n$
|
||||||
määrän välillä $1 \ldots n$.
|
between $1 \ldots n$.
|
||||||
Esimerkiksi $\varphi(12)=4$,
|
For example, $\varphi(12)=4$,
|
||||||
koska luvut 1, 5, 7 ja 11 ovat suhteellisia
|
because the numbers 1, 5, 7 and 11
|
||||||
alkulukuja luvun 12:n kanssa.
|
are coprime to the number 12.
|
||||||
|
|
||||||
Totienttifunktion arvon $\varphi(n)$ pystyy laskemaan
|
The value of $\varphi(n)$ can be calculated
|
||||||
luvun $n$ alkutekijähajotelmasta kaavalla
|
using the prime factorization of $n$
|
||||||
|
by the formula
|
||||||
\[ \varphi(n) = \prod_{i=1}^k p_i^{\alpha_i-1}(p_i-1). \]
|
\[ \varphi(n) = \prod_{i=1}^k p_i^{\alpha_i-1}(p_i-1). \]
|
||||||
Esimerkiksi $\varphi(12)=2^1 \cdot (2-1) \cdot 3^0 \cdot (3-1)=4$.
|
For example, $\varphi(12)=2^1 \cdot (2-1) \cdot 3^0 \cdot (3-1)=4$.
|
||||||
Huomaa myös, että $\varphi(n)=n-1$,
|
Note that $\varphi(n)=n-1$ if $n$ is prime.
|
||||||
jos $n$ on alkuluku.
|
|
||||||
|
|
||||||
\section{Modulolaskenta}
|
\section{Modulolaskenta}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue