Accueil > > > MULTIPLICATION DE GRANDS NOMBRES
MULTIPLICATION DE GRANDS NOMBRES
Information sur la source
Description
C'est un de mes premiers programme en C. Il effectue la multiplication de deux nombres quelque soit leur taille. Pour cela il utilise l'algorithme de la multiplication Egyptienne (aussi appelé multiplication Russe). Pour plus d'information sur l'algorithme : http://www.recreomath.qc.ca/dict_russe_multiplicat ion.htm (n'est pas de moi).
Source
- /* Exemple avec la multiplication de A=D91097D725BC9C2C et B=2E4376409371327 */
-
- #include <stdio.h>
- #include <stdlib.h>
-
-
- int main () {
-
- int a , b , n , i , ii, r;
-
- a= 1 ; b = 1 ; /* index supérieur des tableaux respectivement de A et B */
- unsigned int *A = malloc (sizeof(int)*(a+1)) ;
- unsigned int *B = malloc (sizeof(int)*(a+b+2)) ;
- unsigned int *res = malloc (sizeof(int)*(a+b+2)) ;
- unsigned long long int c;
-
- /* A=D91097D725BC9C2C ; B=2E4376409371327 ; répartie dans leur tableau*/
- A[0]=0x025BC9C2C ; B[0]=0x009371327 ;
- A[1]=0x0D91097D7 ; B[1]=0x02E43764 ;
-
- do {
- if (A[0]%2==1) {
-
- for (i=0 ; i<=b ; i++) {/* addition */
-
- c=(long long int)res[i]+(long long int)B[i] ; res[i]=(c&0x0FFFFFFFF) ;
-
- n=i ;
- while(c>>32!=0){
- n++ ; c=(long long int)res[n]+(long long int)1 ;
- if(c>>32==0){res[n]++ ;}else{res[n]=0;}
- }
-
- }/* for */
- }/* if%2 */
-
-
- r=0 ; /* décallage droite */
- for (ii=0 ; ii<a ; ii++) {
- r=(A[ii+1]&1)<<31 ; A[ii]=A[ii]>>1 ; A[ii]=A[ii]|r ;}
- A[a]=A[a]>>1 ; if(A[a]==0){a--;}
-
- /* décallage gauche*/
- if ((B[b]&0x0EFFFFFFF)!=0) {b++ ; }
- for(ii=b ; ii>=0 ; ii--) {r=(B[ii]&0x0EFFFFFFF)>>31 ; B[ii+1]=B[ii+1]|r ; B[ii]=B[ii]<<1; }
- }while(a>-1) ;
-
-
- /* 160 premiers bit du résultat obtenue */
- printf("\n %X%X%X%X%X" ,res[4] , res[3] , res[2] , res[1] ,res[0]) ;
-
- /* résultat du test */
- printf("\n 273A2EE4CD3E67E2EC34BC6D8C70EB4\n") ;
-
- free (A) ; free (B) ; free (res) ;
- return 0 ;
- } /* main */
/* Exemple avec la multiplication de A=D91097D725BC9C2C et B=2E4376409371327 */
#include <stdio.h>
#include <stdlib.h>
int main () {
int a , b , n , i , ii, r;
a= 1 ; b = 1 ; /* index supérieur des tableaux respectivement de A et B */
unsigned int *A = malloc (sizeof(int)*(a+1)) ;
unsigned int *B = malloc (sizeof(int)*(a+b+2)) ;
unsigned int *res = malloc (sizeof(int)*(a+b+2)) ;
unsigned long long int c;
/* A=D91097D725BC9C2C ; B=2E4376409371327 ; répartie dans leur tableau*/
A[0]=0x025BC9C2C ; B[0]=0x009371327 ;
A[1]=0x0D91097D7 ; B[1]=0x02E43764 ;
do {
if (A[0]%2==1) {
for (i=0 ; i<=b ; i++) {/* addition */
c=(long long int)res[i]+(long long int)B[i] ; res[i]=(c&0x0FFFFFFFF) ;
n=i ;
while(c>>32!=0){
n++ ; c=(long long int)res[n]+(long long int)1 ;
if(c>>32==0){res[n]++ ;}else{res[n]=0;}
}
}/* for */
}/* if%2 */
r=0 ; /* décallage droite */
for (ii=0 ; ii<a ; ii++) {
r=(A[ii+1]&1)<<31 ; A[ii]=A[ii]>>1 ; A[ii]=A[ii]|r ;}
A[a]=A[a]>>1 ; if(A[a]==0){a--;}
/* décallage gauche*/
if ((B[b]&0x0EFFFFFFF)!=0) {b++ ; }
for(ii=b ; ii>=0 ; ii--) {r=(B[ii]&0x0EFFFFFFF)>>31 ; B[ii+1]=B[ii+1]|r ; B[ii]=B[ii]<<1; }
}while(a>-1) ;
/* 160 premiers bit du résultat obtenue */
printf("\n %X%X%X%X%X" ,res[4] , res[3] , res[2] , res[1] ,res[0]) ;
/* résultat du test */
printf("\n 273A2EE4CD3E67E2EC34BC6D8C70EB4\n") ;
free (A) ; free (B) ; free (res) ;
return 0 ;
} /* main */
Conclusion
Compilé avec gcc sous gentoo :)
Sources de la même categorie
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
Multiplication sur des tableaux entiers [ par kikouk ]
Salut.J'ai besoin de créer une procédure sous Visual C++ qui réalise la multiplication de 2 grands entiers (stockés dans 2 tableaux (1 dimension)) et
Aidez moi pour une calculette en C [ par pingouf ]
Bonjour, j'ai besoin d'aide pour réaliser une calculette en C. Je suis un tout jeune programmeur et le début est toujours difficile aidez moi svp.Je d
Multiplication de grands nombres [ par zekicker ]
Salut,Je voudrais savoir si qq1 connait une méthode pour effectuer une multiplication de grands nombres comme 467684700 *655000000. En effet, j'obtien
Multiplication des grands nombres. [ par J_r_m ]
Salut @ tous !!!Je suis debutant en C, et je voudrais pouvoir multiplier deux "grands" nombres de plus de dix chiffres en base 10.Je pensais donc met
[AES]Multiplication modulo ? (urgent) [ par Campagnard ]
BonjourJe travaille sur l'implémentation de l'AES. Dans ce standard, on parle de multiplication de polynaumes modulo un polynome irreductib
Dépassement capacité multiplication integer [ par bipcpp ]
Bonjour, J'ai trois integer 64 bits : _int64 i1,i2,i3; Comment détecter le dépassement de capacité possible sur i3, lors d'une multip
multiplication 32bits*32 bits, résultat dans 2 32 bits [ par magodu22 ]
je simule un microprocesseur qui fonctionne en assembleur en langage C. dans ce projet, je dois executer une multiplication de 2 mots de 32 bits, et p
Multiplication de matrice symétrique [ par sortileges125 ]
Voilà mon problème,Je cherche à faire une multiplication de deux matrices symétriques mais seulement avec la partie supérieure ou la partie inférieure
Multiplication de 2 matrices [ par developvbdebut ]
Bonjour tout le mondeJ'ai un probleme avec un algo pour la multiplication de 2 matrices.Voici le codeJe ne m'ai que la fonction qui fais le calcul.int
Multiplication arabe en langage C [ par Stockalone1232 ]
Bonjour tout le monde,Je suis débutant en langage C et je dois faire un programme de multiplication arabe de 2 grands nombres pour mon école. Si certa
|
Derniers Blogs
IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) par richardc
Mise à jour des Web API du 14 Mai
Réservez dès maintenant votre journée du 20 juin pour le Windows Azure Dev Camp 2012 à Paris
Mise à jour de Team Foundation Service
MechCommander 2 sur Windows 8
Entity Framework 5 Release Candidate e...
Cliquez pour lire la suite de l'article par richardc REACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITERREACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITER par Groc
Une mauvaise utilisation de rx lors de l'écriture d'une couche d'accès à des services peut conduire à des cas embarassants avec des erreurs mal gérées, des appels qui ne partent lorsqu'ils le devraient, et même des résultats incorrects . le tout nuis...
Cliquez pour lire la suite de l'article par Groc SHAREPOINT BLOG SITE, PROBLèME D'ARCHIVESSHAREPOINT BLOG SITE, PROBLèME D'ARCHIVES par junarnoalg
Dernièrement, nous avons migré le site
myTIC
vers un nouveau serveur SharePoint 2010. Dans les contenus que nous vouloins récupérer, nous avions un certain nombre de blogs.
Nous avons utilisé les commandes Power...
Cliquez pour lire la suite de l'article par junarnoalg
Forum
PAUSE JEU ALLEGROPAUSE JEU ALLEGRO par souhayebyoussef
Cliquez pour lire la suite par souhayebyoussef
Logiciels
974 Application Server (12.2.4.0)974 APPLICATION SERVER (12.2.4.0)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP mySongBook Player (1.0.0)MYSONGBOOK PLAYER (1.0.0)mySongBook Player est un logiciel gratuit permettant l'accès à une archive de tablatures/partitio... Cliquez pour télécharger mySongBook Player
|