\documentclass[a4paper]{article} \usepackage[utf-8]{inputenc} \usepackage[german]{babel} \usepackage{url} \usepackage{alltt} \usepackage{multicol} \title{Projekt Euler - Problem 9} \ifx\shorttitle\undefined\else \shorttitle{Euler 9} \fi \author{Michael Kalus} \begin{document} \maketitle Vorsicht, die mathematischen Knobeleien in dem Projekt Euler machen süchtig. Hier eine weitere Lösung. Mögen noch viele in Forth folgen. \section{Die Aufgabe} Ein pythagoreisches Triplet ist ein Satz natürlicher Zahlen, $a xn+1 \ Weil nur die natürlichen Werte der Wurzel aus c^2 gebraucht werden, \ wird ganzzahlig kalkuliert. \ Quelle: forth-ev wiki \ http://www.forth-ev.de/wiki/doku.php : sqrt ( a -- s ) DUP 0= ?EXIT DUP >R BEGIN R@ OVER / OVER + 2/ DUP ROT - ABS 1 <= UNTIL R> DROP ; \ Wir brauchen nur die Werte von c, für die c eine natürliche Zahl ist. : nsqrt? ( a b -- f ) pyt dup sqrt ( -- n s ) dup * ( -- n s*s ) - 0= ; ( -- f ) \ if zero, s is natural number. \ Ist a+b+c=1000? : 1000? ( a b -- f ) 2dup pyt sqrt + + 1000 = ; \ Hübsche Ausgabe der gefundenen Lösungen (!) : .solution ( a b -- ) cr ." -------------------" cr 2dup swap ." a=" . ." b=" . 2dup pyt sqrt ." c=" . cr 2dup 2dup pyt sqrt + + ." a+b+c=" . cr 2dup pyt sqrt * * ." abc=" . ; \ Teste a,b bis zum Wert a=b=xx variable xx 1000 xx ! : p9 ( -- ) xx @ 0 DO xx @ 0 DO i j nsqrt? IF i j 1000? IF i j .solution THEN THEN LOOP LOOP cr ." -------------------" ; words cr cr \end{listing} \end{quote} \end{document}