Matematika feladatok
-
#3536
Ha van egy kis számelméletes előéleted, akkor a Wikipedia-n találsz ehhez a kérdéshez tételt, amit értelmezni kell és ha minden OK, akkor használni.
Én ehhez tufaagyú vagyok, szóval előszedtem egy buszozás közben a kis programozható számolómat és némi gondolkodás után egy rövid brute-force algoritmussal neki is estem a feladatodnak.
Ráadásul ebből is a primitív változatot választottam, hogy miért az, majd leírom, de menjünk sorban:
Te azt a feladatot adtad, hogy van egy gyök(2010) sugarú, origó középpontú kör, van-e ennek olyan pontja, aminek a koordinátáinak értéke egész szám?
Ezeket kellett végiggondolni:
- Elég csak az első síknegyedben vizslatni, mert x,y>0
- Sőt, elég csak azokat megkeresni, amelyek az y=x 45 fokos egyenes alatt vannak, mert a felette levő ív ennek az alsó ívnek a tükörképe (az egyenesre, azaz ha lesz egy (x,y)=(a,b) pontod, akkor annak a tükörképe is jó, azaz a (x,y)=(b,a)).
- Ezt tisztázva meg lehet mondani, hogy meddig kell elfutni az egyik, mondjuk az x koordinátával:
2*x^2=2010 egyenletből x=~31.7, azaz elegendő 31-ig futni 1-től az x-el.
- Az algoritmus annyit csinál, hogy x=1, 2, 3, ..., 31 értékekhez kiszámítja y-t, majd megnézi, hogy ennek az y-nak a törtrésze nulla-e. Ha igen, akkor kiírja az (x,y) értékpárt.
- Ez az, amiről írtam, hogy primitív módszer, mert tegyük fel, hogy a számológép csak 12 értékes jegyre tud számolni és y-ra pedig pl. 23.000000000074004587-t kapnánk. Ez pedig a számológép "szerint" egyenlő 23-mal, azaz ezt is, mint hibás jó eredményt jelezné ki.
- Erre jó megoldás lehet az, hogy az y kiszámítása után y egész részével és y egész része+1 -el is visszaellenőrizné, hogy az x^2+(INT(y))^2 után és az x^2+(INT(y)+1)^2 után megkapja-e a 2010-et. Ha nem, akkor hibás volt az y értéke. Ezt nem programoztam le, mert le kellett szállnom a buszról... :P
Az eredmények:
A 2010 nem bontható fel két egész szám négyzetösszegére.
Ellenben a 2009 igen: (28, 35), majd az előtt csak a 2005, de az kétféleképpen: (22, 39) és (18, 41). Az előtt pedig a 2000 szintúgy két módon: (20, 40) és (8, 44).
A legközelebbi dátum pedig a 2017 lesz: (9, 44)
Jó mazsolázást hozzá! :)
És az érdeklődőknek a programlista:
31
Min00
LBL1
2010
-
MR00
x^2
=
SQRT(x)
Min01
FRAC
x=0
GOTO2
DSZ
GOTO1
"v"
HLT
LBL2
"x= AR00 y= AR01"
HLT
DSZ
GOTO1
A program lefutása után egy v karaktert ír a kijelzőre, innen lehet tudni, hogy lefutott. Ha van gyök, akkor azt a kijelzőn x=... y=... alakban jelzi. Ekkor továbbfuttatható az EXE lenyomásával.
ENJOY!