Code:
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).
Code:
#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;
}