Es funktioniert nicht so. Man kann nicht so tun, als würde man in einem endlichen Feld arbeiten und dann durch eine irrationale Zahl dividieren, oder vielmehr kann man das, aber es ergibt keinen Sinn. Sie erhalten als Ergebnis irrelevant irrelevant, das keine Beziehung zu der gewünschten Antwort hat. Du müsstest das ganze Ding in R machen, wenn du so gehst. Das erfordert, extrem große Zahlen zu berechnen und dann einen Rest zu nehmen. Fließkommazahlen werden irgendwann nicht mehr genau genug sein und Ihnen Unsinn bereiten. Das Bit mit dem Gewicht 1 ist immer wichtig, wenn Sie einen solchen Rest machen wollen, aber es ist nicht notwendigerweise in einer Gleitkommazahl vorhanden, abhängig vom Exponenten. Aber vielleicht wussten Sie das, und deshalb haben Sie sich entschieden, es nicht zu tun.
Sie können dies in diesem Fall auch nicht mit der endlichen Feldmathematik tun. Iff 5 ist ein quadratischer Rest in dem Feld, in dem Sie arbeiten, diese Konstruktion funktioniert immer noch. A und B sind nicht phi und phibar, sondern (sqrt (5) +1)/2 bzw. (1-sqrt (5))/2, was bei der endlichen Feldmathematik zu "komischen Zahlen" führt, die aussehen völlig unabhängig von phi und phibar (sind aber tatsächlich das endliche Feld von ihnen). Und natürlich, wenn Sie dies tun, wird es keine Math.sqrt
irgendwo in Ihrem Code geben. Sie brauchen die Nummer x
, so dass x * x = 5
Modulo etwas, nicht eine dyadische rationale Annäherung der Lösung zwischen den Reals.
Die Quadratwurzel von 5 muss existieren, damit eines davon funktioniert, aber Modulo 1000000007, 5 hat keine Quadratwurzel.
Folgende Werke Modulo 1009: 856 * (627 n-383 n)
Andere Algorithmen noch funktionieren, wie eine bestimmte 2x2-Matrix auf die n-te Potenz erhöhen, und seine leicht optimierte Version (redundante Berechnung vermeiden).