Matematika feladatok
  • ZilogR
    #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!