Ganzzahlige Punkte auf einer Geraden in einem bestimmten Bereich bestimmen

Elis56 shared this question 1 year ago
Answered

Hallo,

ich wäre sehr dankbar, wenn mir jemand hier im Forum weiterhelfen kann und vielleicht auch für weitere Fragen zur Verfügung steht.

Ich möchte gern die ganzzahligen Punkte auf der Geraden a*x + b*y =c (d.h. die Lösungen der Diophantischen Gleichung) in einem bestimmten Bereich bestimmen. Genau gesagt im Bereich -100 <= x, y <= 100. Die Variablen a, b und c habe ich durch Schieberegler bestimmt.

Vielen Dank im Voraus, falls mir jemand weiterhelfen kann.

Comments (8)

photo
1

Please post your .ggb file

photo
1

Das ist meine bisherige Datei.

Files: VNZ.ggb
photo
1

Something like this might work, (example in [-10,10])


RemoveUndefined(Flatten(Sequence(Sequence(If(a k + b n ==c, {(k,n)}), k, -10, 10),n, -10, 10)))


but:

- the interval [-100,100] slows down the whole thing (it's currently hanging my ggb Classic)


- do you need decimal coefficients for your equation? Setting a step=1 makes things faster

photo
1

This is an example file with the previous command extended to [-100,100] and integer coefficients for the line.

photo
photo
1

Eine weitere Möglichkeit besteht darin, dass alle (X,-100, 100) ganzzahligen Senkrechten (x=X) mit der Geraden (gl1:a*x+b*y=c) geschnitten werden und dann davon nur jene Schnittpunkte (P) behalten werden, deren y-Wert (y(P)) ebenfalls ganzzahlig ist. Das ergibt total 2*201 Iterationsschritte, was für die Performance (beim Verändern der Schieberegler) nicht kritisch ist.

BehalteWenn(IstGanzzahlig(y(P)), P, Folge(Schneide(gl1, x = X), X, -100, 100))

photo
1

Diese Variante erfordert eine Sonderbehandlung des Falls b=0.

photo
1

Danke, Richtig!

BehalteWenn(IstGanzzahlig(y(P)), P, Folge(Schneide(gl1, Wenn(b ≟ 0, y = X, x = X)), X, -100, 100))


Alternative (allgemeiner): Wenn gl1 senkrecht zur Achse ist

Wenn(gl1 ⟂ xAchse, y = X, x= X) oder kürzer

Wenn(gl1 ⟂ xAchse, y, x) = X

photo
1

Sorry, immer noch falsch.

Besser:

BehalteWenn(IstGanzzahlig(y(P)) ∧ IstGanzzahlig(x(P)), P, Folge(Schneide(gl1, Wenn(gl1 ⟂ xAchse, y = X, x = X)), X, -100, 100))

.

Alternative falls die Laufzeit entscheidend ist:

l1=Wenn(gl1 ⟂ xAchse,

BehalteWenn(IstGanzzahlig(x(P)), P, Folge(Schneide(gl1, y = Y, Y, -100, 100)),

BehalteWenn(IstGanzzahlig(y(P)), P, Folge(Schneide(gl1, x = X), X, -100, 100))

)

photo
© 2020 International GeoGebra Institute