PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Euklids Algo aka GGT ausrechen



aKiller47
04.03.2010, 19:13
Hey,

ich hatte irgendwie Langeweile und würde mich einfach über Bewertung dieses Codes freuen, sei es Kritik, Verbesserung oder Lob freuen!

http://akiller47.phpnet.us/euklid.txt

Vielleicht konntet ihr ja sogar was lernen. Ich hoffe einfach das es jemandem was nützt.

mfG aKiller

naroht
04.03.2010, 20:30
if(argv[1] == 0 || argv[2] == 0) // Dont try it!
return 0;
if(argc != 3){
printf("Usage: a b\n");
return 0;
}
else
Du solltest die Anzahl der Parameter überprüfen bevor du sie verwendest und wenn du in dem if ein return aufrufst, dann kannst du dir das else sparen. ;)
Für atoi solltest du auch noch auch noch stdlib.h einbinden. Der ein oder andere Compiler stört sich vielleicht sonst dran.
Aber kommt ja eigentlich eher auf den Algorithmus an und der funktioniert! :)

Hier mal noch der erweiterte Euklid'schen Algorithmus zur Berechnung der modularen Inverse (z.B. für RSA).

#include <stdio.h>
#include <stdlib.h>


int modInverse(int a, int n)
{
int rest=2,teiler=a,wert=n,erg;
while (rest>1)
{
rest = wert%teiler;
erg = wert/teiler;
wert = teiler;
teiler = rest;
}

return wert;
}

int main(int argc, char* argv[])
{
if(argc!=3)
{
fprintf(stderr,"usage: %s <zahl> <zahl>\n",argv[0]);
exit(-1);
}

int a,b,inv;
a = atoi(argv[1]);
b = atoi(argv[2]);
inv = modInverse(a,b);
printf("Die modulare Inverse von %d zu Modul %d ist %d.\n",a,b,inv);

return 0;
}

HellSlayer
04.03.2010, 20:42
Srry für meine noob frage aber wofür ist das gut ^^ was berechnet man da?^^

aKiller47
04.03.2010, 20:48
Du solltest die Anzahl der Parameter überprüfen bevor du sie verwendest und wenn du in dem if ein return aufrufst, dann kannst du dir das else sparen.

Ja das war echt mein Fehler, ist logisch. Danke fürs drauf aufmerksam machen :)

Man kann den größten gemeinsamen Teiler ausrechnen!