Pro překlad je nutné dát nejprve: apt-get install libgmp-dev (někde i libgmp10)
Překlad: gcc -o test test.c -lgmp
A maximálně ořezaný kód:
// Minimalni include
#include <stdio.h>
#include <stdlib.h>
#include <sys/time.h>
#include <gmp.h>
// Pro mereni casu od oka
struct timeval stop, start;
// Gnu MP
// Definice cisel
mpz_t test,test1,test2,test3,test4,test5;
//Testovaci funkce vycucana z prstu, pouzite funkce jsou ty, co se pouzivaji v kazdem pruchodu
void ImplS()
{
gettimeofday(&start, NULL);
mpz_set_ui(test5, 64);
mpz_mod(test3,test1,test2);
for (int x=0;x<200;x++)
{
if (mpz_cmp_ui(test3,1) == 0) { printf("Chyba ImplS"); exit(1);}
mpz_div(test3,test2,test5);
mpz_mul (test, test1, test3);
mpz_sub_ui (test, test2,2);
}
gettimeofday(&stop, NULL);
printf("Doba trvani %lu\n", stop.tv_usec - start.tv_usec);
}
int main ()
{
mpz_init (test);
mpz_init (test1);
mpz_init (test2);
mpz_init (test3);
mpz_init (test4);
mpz_init (test5);
//Nastavim si nejake hodnoty, jen tak
mpz_set_str(test1, "98026498413065498413061649849130659574916061649749846510016498844622159884961", 10);
mpz_set_str(test2, " 8412168943211616954984651120065198498461313216256168884462132320656498449848", 10);
ImplS();
return 0;
}
Mě to dává hodnoty 22-28 a při stejném měření času za stejnou dobu provedu 20 až 25 součtů MD5, včetně přípravy dat a vyhodnocení :-(