Einzelnen Beitrag anzeigen

Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#165

Re: Positive Zahlen in negative umwandeln

  Alt 31. Okt 2008, 20:29
Das große Problem an den meisten bereits geposteten Lösungen ist, dass sie Kenntnis des Eins-Elements des Rings der ganzen Zahlen voraussetzen. Davon kann aber keinesfalls ausgegangen werden! Ich schlage daher vor, das Eins-Element zunächst mit einem geeigneten Satzes zu finden - meiner Meinung nach bietet sich besonders der Kleine Satz von Fermat an.
Delphi-Quellcode:
var p, a, Eins: Cardinal;

repeat
p := Random(High(Cardinal));
until IsPrime(p);

repeat
a := Random(High(Cardinal));
until (a mod p) <> 0;

Eins := ModPower(a, p-1, p); //a^(p-1) ist kongruent zu 1 modulo p
Eine schöne Alternative zu den bisher vorgestellten Lösungen bietet der Satz von Wilson.

Delphi-Quellcode:
var p, res: Cardinal;

repeat
p := Random(High(Cardinal));
until IsPrime(p);

res := (Fakultaet(p - 1) mod p - p);

Result := Zahl * res;
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."