Hei
Alkeiskurssilla oheinen tehtävä. Ollut vanha koetehtävä. Voisiko joku autaa siinä alkuun?
Kaikki kokonaisluvut voidaan esittää tuloina ykkösen kanssa, esimerkiksi 23 == 23 * 1, ja
lisäksi muut kuin vain itsellään ja yhdellä jaolliset (eli alkuluvut) vähintään yhdellä muulla
tavalla, esimerkiksi -15 == -5 * 3.
Toteuta ohjelma, joka tulostaa käyttäjän yksitellen antamista kokonaisluvuista N kappaletta eri
esityksiä kahden kokonaisluvun tuloina edellä mainitulla tavalla, mikäli mahdollista. Jos
käyttäjän antama luku voidaan esittää kahden luvun tuloina alle N tavalla, tulostetaan kaikki
esitystavat. (Vihje: int/int)
Arvo N on annettava ohjelmaa käynnistettäessä komentoriviparametrina, ja sen tulee olla
vähintään 1 sekä enintään 9. Luku 0 syötteenä päättää ohjelman suorituksen.
Muista opastaa käyttäjää vuorovaikutteisesti sekä varautua virhetilanteisiin niin, ettei
ohjelman suoritus pääse keskeytymään (kaatumaan) ajon aikana.
Alkeiskurssilla oheinen tehtävä. Ollut vanha koetehtävä. Voisiko joku autaa siinä alkuun?
Kaikki kokonaisluvut voidaan esittää tuloina ykkösen kanssa, esimerkiksi 23 == 23 * 1, ja
lisäksi muut kuin vain itsellään ja yhdellä jaolliset (eli alkuluvut) vähintään yhdellä muulla
tavalla, esimerkiksi -15 == -5 * 3.
Toteuta ohjelma, joka tulostaa käyttäjän yksitellen antamista kokonaisluvuista N kappaletta eri
esityksiä kahden kokonaisluvun tuloina edellä mainitulla tavalla, mikäli mahdollista. Jos
käyttäjän antama luku voidaan esittää kahden luvun tuloina alle N tavalla, tulostetaan kaikki
esitystavat. (Vihje: int/int)
Arvo N on annettava ohjelmaa käynnistettäessä komentoriviparametrina, ja sen tulee olla
vähintään 1 sekä enintään 9. Luku 0 syötteenä päättää ohjelman suorituksen.
Muista opastaa käyttäjää vuorovaikutteisesti sekä varautua virhetilanteisiin niin, ettei
ohjelman suoritus pääse keskeytymään (kaatumaan) ajon aikana.
Vastaukset 2
Vanhimmat
Luku = 12, N = 9:
3*4
-3*-4
2*6
-2*-6
Luku = 4, N = 9:
2*2
-2*-2
Luku = -4, N = 9: (Meneekö tämä oikein)
-2*2
2*-2
Luku = 6, N = 9: (Meneekö tämä oikeein)
3*2
2*3
-3*-2
-2*-3
Meneekö nuo kaksi viimeistä oikein, vai pitäisikö esim. noiden nelosten mennä seuraavasti:
Luku = 4, N = 9:
2*2
-2*-2
Luku = -4, N = 9:
-2*2
Tehtävässä tuskin vaaditaan korkeampaa matematiikkaa lonkalta nakattuna, joten voit käyttää ns. trial division algoritmia, eli kokeilet luvulle eri tekijöitä.
Olkoon k jokin kokonaisluku. Jos sillä on ykkösestä poikkeavia tekijöitä, yksi niistä on alle neliöjuuri k:sta. Tutkit siis kaikki luvut väliltä [2,sqrt(k)] ja kokeilet, jakavatko ne luvun k tasan. Sen voit tehdä jakojäännösoperaattorilla %.
if (k % jakaja == 0) {...}
Jos yksikään luku tältä väliltä ei jaa k:ta, kyseessä on alkuluku. silloin on vain tuo esitys
k == k * 1
Jos taas jakaja löytyy, saat uuden luvun k2 tutkittavaksi, kun jaat sen löydetyn tekijän pois k:sta. Tätä pitää jatkaa N kertaa, tai lopettaa, jos löytyy alkuluku.
Käyttöliittymän jätän vastuullesi. Kysy lisää ja näytä yritelmäkoodia, niin joku kyllä auttaa. Kunhan teet jotain itsekin, niin kaikki on hyvin meidän mielestämme :-)