# C et C++ > C > Contribuez >  Opration sur des grands nombres [Sources]

## Melem

Voici quelques fonctions permettant de faire des calculs exacts sur des nombres qui peuvent tre trs grands. En fait, les nombres ici sont reprsents par des chanes de caractres (dynamiques), donc on calcule exactement comme  la main (vident). J'ai dcid de reprsenter les nombres directement par des chanes de caractres pour faciliter la saisie et l'affichage, mais videmment a consomme ...

J'ai utilis le programme greatns (*Great* *N*umbre*s*) pour calculer 2008! (factorielle de 2008), a donne (valeur exacte !) :


```

```

 ::mouarf::

----------


## komput

Oui a marche mais j'ai fait un programme qui va plus vite. Je n'ai pas les sources sous la main tout de suite dsol, je les donnerai bientt si a peut intresser quelqu'un.

Voil quelques pistes qui marchent pour l'optimisation :

utiliser plutt les vraies valeurs pour reprsenter les chiffres a vite de calculer (i-'0')  chaque fois
et faire moins de malloc() dans la multiplication a aussi a prend pas mal de temps cpu
Pour toutes les oprations qui ncessitent d'allouer de la mmoire temporaire, en gnral on peut passer en paramtre un pointeur (mmoire dj alloue) o la fonction travaille tranquillement. Comme a mme plusieurs instructions peuvent utiliser cet espace allou au dbut du programme.
En envoyant en paramtre la longueur des nombres on vite d'utiliser strlen() trop souvent (du coup les structures sont intressantes)
Il y a d'autres optimisations, que je n'ai pas toutes faites (reprsentation en binaire au lieu du dcimal...)

avec a j'ai programm le cryptage RSA sur des nombres de taille arbitraire (500 chiffres, en 10s) et a va assez vite (enfin tout est relatif)

----------


## Melem

Merci de tes remarques. En effet je n'ai pas cherch  optimiser, c'est juste un programme que j'ai fait pour m'amuser. Mais d'accord je vais le modifier quand j'en aurai le temps, et si tu peux poste galement le tiens.

----------


## komput

VOil mes sources, mais je n'ai pas acherch  faire une version "grand public" donc c'est un peu pas propre du tout. Dsol.

j'ai donn avant les quelques optimisations que j'ai apportes, jette un coup d'oeil si a t'intresse. Certaines fonctions ne sont pas encore finalises mais a arrive.
En fait partout o il y a "dec" dans les noms de fonctions/fichiers/structures c'est que les nombres sont reprsents en dcimal. Je suis en train de faire une petite version pour la reprsentation binaire, histoire de voir si on y gagne, mais j'en doute.

Sinon le code est assez simple, je vais bientt rajouter la fonction racine.
Si tu compiles mon programme tel quel tu as le cryptage RSA : rentre un nombre, la puissance, le modulo et il donne le reste.

Lien vers le code : ici

----------

