ISETL-Harjoitus 3, 1999. Kertausta, alkuluvut, kongruenssi
Tehtävä 1. Kertausta
a) Selvitä mitä tekevät seuraavat ISETL-rivit:
> At := [4,6,4,7,8,-4,3]; Bt := [6,1,3,5]; #At; #Bt;
> At + Bt; At - Bt;
> At inter Bt;
> %+Bt; %*Bt;
> Aj := {a|a in At}; Bj := {b|b in Bt}; Aj;Bj; #Aj; #Bj;
> Aj union Bj; Aj inter Bj; Aj - Bj;
> 7 in Aj; 5 in Aj; 5 notin Bj;
> Aj - Bj = Aj inter (Aj - Bj);
> Aj subset (Aj - Bj); (Aj - Bj) subset Aj;
b) Muodosta tuplet tai joukot:
1) Joukko, jossa on luvut -7,-4,-1,2,...,101.
2) Tuple, jossa ovat luvut 2,3,..., floor(Ö157).
3) Joukko, jossa on välin [-100,100] ne kokonaisluvut, jotka ovat
jaollisia sekä seitsemällä että kolmella.
4) Tuple, jossa ovat lukujen 4259, 1311, 232 ja 2413 jakojäännökset
jaettaessa luvulla 3, samassa järjestyksessä.
Tehtävä 2. Ohjelmointia: interaktiivinen tapa
Selvitä rivi riviltä, mitä seuraavat ISETL-syötteet
tekevät:
> a := 96; b := 36;
> r0 := a; r1 := b; jj := r0 mod r1;
Tilanne: [r0,r1,jj] =
> if (not jj = 0) then r0 := r1; r1 := jj; jj := r0 mod r1; end if;
Tilanne: [r0,r1,jj] =
> if (not jj = 0) then r0 := r1; r1 := jj; jj := r0 mod r1; end if;
Tilanne: [r0,r1,jj] =
> if (not jj = 0) then r0 := r1; r1 := jj; jj := r0 mod r1; end if;
Tilanne: [r0,r1,jj] =
Jatka prosessia kunnes jj = 0. Mitä ohjelma tekee?
Tehtävä 3. Ohjelmointia: funktiomainen ohjelma
Pue edellinen prosessi funktioksi nimeltä sytti, joka saa
kokonaislukusyötteet a ja b, toistaa if-lauseessa
tehtäviä käskyjä kunnes jj = 0 ja lopulta tulostaa
lukujen a ja b suurimman yhteisen tekijän.
Huomaa, että if-then-lause tulee korvata while-do-rakenteella,
jolloin kyseistä käskyriviä suoritetaan niin kauan kuin
jj ¹ 0. Aloitat siis:
> sytti := func(a,b);
Tehtävä 4. Tekijät etsivä funktio
Tee funktio tekijat, joka etsii ja palauttaa annetun positiivisen
kokonaisluvun b positiiviset tekijät.
Opastus: Päätetään ensin, millaisena tulos halutaan.
Koska kysytään vain tekijötä, ei niiden kertalukuja,
riittää hyvin tulos joukkona. Tekijän matemaattinen kriteeri:
a\mid b Û
b = ka jollakin k Î
Z. |
|
Kaikki tekijät ovat joukko { a Î
Z \mid $ k Î
Z : b = ka }. Tämä pitää pukea ISETL-muotoon
{a | a in A : exists k in B : b = k*a}, jossa vielä pitää
muuttaa esiintyvät joukot A ja B sopiviksi äärellisiksi
joukoiksi tai tupleiksi. Sitten pitää kääriä saavutus
funktioksi. Aloita
> tekijat := f ... ;
Tehtävä 5. Alkulukutesti (uudelleen)
Tee funktio alkulukuko, joka tutkii onko annettava luku alkuluku.
Mieti ensin, mitä alkuluku tarkoittaa. Vertaa edelliseen tehtävään,
voitko hyödyntää siinä saatua tietoutta. Sen onko luku
toisen tekijä voit testata suoraan mod-käskyllä.
Opastusta: Tee ensin exists-rakenne, joka selvittää
onko luku jaollinen millään luvuista 2, 3, ¼
Tietenkin pitää pysähtyä lukua yhtä pienempään;
jopa vieläkin pienempi riittää, mikä? Lopuksi pistä
eteen not (negaatio).
Tehtävä 6. Kongruenssifunktio
Olkoon m Î N ja a,b
Î Z. Luvut a ja b
ovat kongruentteja modulo m jos m |
(a-b).
Merkintä: a º b
(mod m).
Kirjoita funktio kongruenttiko, joka tutkii onko luku a
kongruentti luvun b kanssa modulo m. Funktiollasi on siis
kolme syötettä a,b ja m.
Tehtävä 7. Kongruenssitehtäviä
Aseta ISETLissä !setrandom off, niin ISETL ei luettele joukon
jäseniä satunnaisesti. Olkoon kaikissa tämän tehtävän
kohdissa k in [-20..20].
a) Muodosta kokonaislukujen k joukko kon3, jotka ovat
kongruentteja 3:n kanssa modulo 5.
b) Muodosta kaikkien niiden kokonaislukujen k joukko kon4,
jotka ovat kongruentteja neljän kanssa modulo 5, sekä vastaavat
joukot kon1,kon2 ja kon5 ja kon0. Mitkä
kaksi muodostamistasi joukoista ovat samoja? Miksi?
c) Mikä on äskeisten joukkojen yhdiste (unioni)?
d) Muodosta niiden kokonaislukujen x joukko, joiden jakojäännös
jaettaessa viidellä on kolme. Mitä huomaat?
e) Mikä on kon1 inter kon2? Entä muille joukkopareille?
Miksi?
Tehtävä 8. Lukujen kanoninen esitys (kotitehtäväksi)
Tee funktio, joka etsii annetulle positiiviselle kokonaisluvulle esityksen
alkulukujen tulona, ts. sen kanonisen esityksen , jossa esiintyy
vain alkulukujen potensseja. Esimerkiksi luvun 24 alkutekijäesitys
on 23·3 ja luvun 50400 alkutekijäesitys on 2532527.
Voit suunnitella ohjelman niin, että se antaa tuloksena joukon, jonka
alkioina ovat järjestetyt kaksikot (tuplet) [p,a], jotka
vastaavat tekijää pa.
File translated from TEX by TTH,
version 1.96.
On 11 Oct 1999, 09:31.