Kezdőoldal » Közoktatás, tanfolyamok » Házifeladat kérdések » Hogy oldjam meg? Határozzuk...

Hogy oldjam meg? Határozzuk meg azokat a háromjegyűnél nem nagyobb prímszámokat, amelyek felírhatók (n-1) ^3-2n alakba, ahol n>2 természetes szám.

Figyelt kérdés
2019. márc. 4. 19:39
 1/4 Thispain ***** válasza:

Egy c# programkód a feladat megoldására:


for(int i = 2;i<=999;i++)

{

n = (i-1)*(i-1)- 2*i

for(int j = 2; j<=999; j++)

{

if(n%j == 0)

{

j = 1000;

}

}

if(j == 999)

{

listBox.Items.Add(n);

}

}


Remélhetőleg működik.

2019. márc. 4. 20:04
Hasznos számodra ez a válasz?
 2/4 anonim válasza:

#1 Nem értek annyira a programozáshoz de mintha valami nem stimmelne az algoritmusban..

Először is a 3. sor el lett írva, a kérdésben (n-1) a harmadikon van.

Aztán magának a kapott számnak kell 1000nél kisebbnek lennie, te viszont a kérdésben "n"-el jelölt természetes számot próbálgattad végig 2-999ig, ami alapbol akkora számokat eredményez mint ide Amszterdam, ráadásul csak 999ig osztogattad vissza a prím ellenőrzésnél, ami nagy számoknál hibákat eredményez. Persze a listázott számokbol ki lehet olvasni azt a néhány darab 1000nél kisebbet de nah.. :D

2019. márc. 4. 20:35
Hasznos számodra ez a válasz?
 3/4 Thispain ***** válasza:

A kód leírása után tesztelés alá vetettem azt, így a hibák nagy részét észrevettem, és kijavítottam. A szám 3-ra emelését az írásod nélkül a javított verzióbol is kihagytam volna.

Javított verzió:


int j;

for (int i = 2; i <= 999; i++)

{

bool a = true;

int n = (i - 1) * (i - 1)*(i - 1) - 2 * i;

if (n >= 2 && n <= 999)

{

for (j = 2; j < n; j++)

{


if (n % j == 0)

{

a = false;

j = n;

}

}


if (a == true)

{

listBox1.Items.Add(n);

}

a = true;

}

}

2019. márc. 4. 20:48
Hasznos számodra ez a válasz?
 4/4 anonim ***** válasza:

Első körben érdemes lenne megnézni, hogy egyáltalán milyen n-ekre vizsgálódhatunk, ehhez oldjuk meg az


(n-1)^3-2n <= 1000 egyenletet.


Az (n-1)^3 egy "gyorsan növő" függvény a 2n-hez képest, így nézzük meg, hogy egyáltalán ez mikor marad 1000 alatt, tehát:


(n-1)^3 <= 1000, erre n=11 adódik, tehát n=11-ig még biztosan 1000 alatt maradunk (a kivonás miatt). Nézzük, hogy nagyobb n-ekre mi történik:


n=12 esetén: (12-1)^3-2*12=1307, ez pedig már túl sok. Azt nem nehéz belátni, hogy n>=12-re a függvény szigorúan monoton növő, ezért mindél nagyobb számot írunk n helyére, annál nagyobb értéket kapunk, így 1000 alá nem fogunk visszajutni.


Innentől kezdve csak 8 darab n-re kell megnézni, hogy milyen értékeket kapunk:


n=3: 2, ami prímszám

n=4: 19, ami szintén prímszám

n=5: 54, ami nem prímszám. Azt is érdemes észrevenni, hogy ha páratlant írunk n helyére, akkor eredményül biztosan páros számot kapunk, ami nem lehet prím, mert a 2-t már megtaláltuk, és n>=5-re is szigorúan monoton nő a függvény.

n=6: 113, ez is prím

n=8: 327, ami nem prím, mivel 3*109

n=10: 709, ami prím


Más megoldás nincs.


Ez a megoldás azért működött, mert kevés lehetőség volt, így kevesett kellett manuálisan számolni. Nem tudom, hogy ennek a feladatnak van-e olyan megoldása, ami manuális számolás nélkül kiadná-e az eredményeket nagyobb számokra, de kétlem.

2019. márc. 4. 20:53
Hasznos számodra ez a válasz?

Kapcsolódó kérdések:




Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!