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.
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.
#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
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;
}
}
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.
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
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!