Commit 37a5f1f07dd34e205191c82d6946a751bf64ee2d

Authored by Vincent Benoist
1 parent b8af5d95

tpSD jusqu'a complexitee

SD.tar.gz 0 → 100644
No preview for this file type
SD/TP1/Makefile 0 → 100644
@@ -0,0 +1,17 @@ @@ -0,0 +1,17 @@
  1 +.PHONY: clean,real-clean
  2 +LD = gcc
  3 +CC = gcc
  4 +CFLAGS = -Wall -W -Werror
  5 +SRC=$(wildcard *.c)
  6 +OBJ=$(SRC:.c=.o)
  7 +prog : $(OBJ)
  8 + $(LD) -o $@ $^
  9 +
  10 +%.o : %.c
  11 + $(CC) $(CFLAGS) -c $^
  12 +
  13 +clean :
  14 + rm -f *.o
  15 +
  16 +real-clean : clean
  17 + rm -f prog
0 \ No newline at end of file 18 \ No newline at end of file
SD/TP1/a.out 0 → 100755
No preview for this file type
SD/TP1/chaine.c 0 → 100644
@@ -0,0 +1,42 @@ @@ -0,0 +1,42 @@
  1 +#include <stdio.h>
  2 +#include <ctype.h>
  3 +#include <stdlib.h>
  4 +#include "chaine.h"
  5 +
  6 +void init_chaine(struct chaine* A){
  7 +
  8 + A->i=0;
  9 + A->n=4;
  10 + A->s=(char*)malloc(A->n*sizeof(char));
  11 +
  12 +}
  13 +
  14 +void ajout_chaine(struct chaine* A,char c){
  15 +
  16 + if(A->i==A->n){
  17 + A->n=A->n+4;
  18 + A->s=realloc(A->s,A->n*sizeof(char));
  19 + A->s[A->i]=c;
  20 + A->i=A->i+1;
  21 +
  22 + }else{
  23 + A->s[A->i]=c;
  24 + A->i=A->i+1;
  25 + }
  26 +}
  27 +
  28 +
  29 +void imprime_chaine(struct chaine A){
  30 + int j;
  31 +
  32 + for (j=0;j<=A.i;j++){
  33 + printf("%c",A.s[j]);
  34 + }
  35 + printf("\n");
  36 +
  37 +
  38 +}
  39 +
  40 +void clear_chaine(struct chaine* A){
  41 + free(A->s);
  42 +}
SD/TP1/chaine.h 0 → 100644
@@ -0,0 +1,10 @@ @@ -0,0 +1,10 @@
  1 +struct chaine{
  2 +int i;
  3 +int n;
  4 +char* s;
  5 +};
  6 +
  7 +extern void init_chaine(struct chaine*);
  8 +extern void ajout_chaine(struct chaine*,char);
  9 +extern void clear_chaine(struct chaine*);
  10 +extern void imprime_chaine(struct chaine);
SD/TP1/chaine.o 0 → 100644
No preview for this file type
SD/TP1/main.c 0 → 100644
@@ -0,0 +1,22 @@ @@ -0,0 +1,22 @@
  1 +#include <stdio.h>
  2 +#include <ctype.h>
  3 +#include <stdlib.h>
  4 +#include "chaine.h"
  5 +
  6 +
  7 +
  8 +int main(){
  9 +int c;
  10 +struct chaine A;
  11 +init_chaine(&A);
  12 +c=getchar();
  13 +
  14 +while(! isspace(c)){
  15 + ajout_chaine(&A,c);
  16 + c=getchar();
  17 +}
  18 +
  19 +imprime_chaine(A);
  20 +clear_chaine(&A);
  21 +return(0);
  22 +}
SD/TP1/main.o 0 → 100644
No preview for this file type
SD/TP1/prog 0 → 100755
No preview for this file type
SD/TP1/tp1.o 0 → 100644
No preview for this file type
SD/TP1_suite/Makefile 0 → 100644
@@ -0,0 +1,17 @@ @@ -0,0 +1,17 @@
  1 +.PHONY: clean,real-clean
  2 +LD = gcc
  3 +CC = gcc
  4 +CFLAGS = -Wall -W -Werror
  5 +SRC=$(wildcard *.c)
  6 +OBJ=$(SRC:.c=.o)
  7 +prog : $(OBJ)
  8 + $(LD) -o $@ $^
  9 +
  10 +%.o : %.c
  11 + $(CC) $(CFLAGS) -c $^
  12 +
  13 +clean :
  14 + rm -f *.o
  15 +
  16 +real-clean : clean
  17 + rm -f prog
0 \ No newline at end of file 18 \ No newline at end of file
SD/TP1_suite/a.out 0 → 100755
No preview for this file type
SD/TP1_suite/chaine.c 0 → 100644
@@ -0,0 +1,20 @@ @@ -0,0 +1,20 @@
  1 +#include "chaine.h"
  2 +#include <stdlib.h>
  3 +#include <stdio.h>
  4 +
  5 +void init_chaine(struct chaine* C) {
  6 + init_liste_char (&C->L);
  7 +}
  8 +void ajout_chaine(struct chaine* C,char c){
  9 + ajouter_en_tete_liste_char (&C->L, c);
  10 +}
  11 +void ajoutQueue_chaine(struct chaine* C,char c){
  12 + ajouter_en_queue_liste_char (&C->L, c);
  13 +}
  14 +void clear_chaine(struct chaine* C){
  15 + clear_liste_char (&C->L);
  16 +
  17 +}
  18 +void imprime_chaine(struct chaine* C){
  19 + imprimer_liste_char (&C->L);
  20 +}
SD/TP1_suite/chaine.h 0 → 100644
@@ -0,0 +1,12 @@ @@ -0,0 +1,12 @@
  1 +#include "liste_char.h"
  2 +
  3 +
  4 +struct chaine{
  5 + struct liste_char L;
  6 +};
  7 +
  8 +extern void init_chaine(struct chaine*);
  9 +extern void ajout_chaine(struct chaine*,char);
  10 +extern void ajoutQueue_chaine(struct chaine*,char);
  11 +extern void clear_chaine(struct chaine*);
  12 +extern void imprime_chaine(struct chaine*);
SD/TP1_suite/chaine.o 0 → 100644
No preview for this file type
SD/TP1_suite/liste_char.c 0 → 100644
@@ -0,0 +1,82 @@ @@ -0,0 +1,82 @@
  1 +#include "liste_char.h"
  2 +#include <stdlib.h>
  3 +#include <stdio.h>
  4 +
  5 +void init_liste_char (struct liste_char* L){
  6 + L->tete = NIL;
  7 + L->nbchar = 0;
  8 +}
  9 +
  10 +void clear_liste_char (struct liste_char* L){
  11 + struct maillon_char* tmp;
  12 + struct maillon_char* suivant;
  13 +
  14 + int i = 0;
  15 + tmp = L->tete;
  16 + for(i = 0; i < L->nbchar; i++){
  17 + suivant = tmp->next;
  18 + free(tmp);
  19 + tmp = suivant;
  20 + }
  21 +}
  22 +
  23 +void imprimer_liste_char (struct liste_char* L){
  24 +
  25 + if(L->tete == NIL){
  26 + printf("EmptyList\n");
  27 +
  28 + }else{
  29 + struct maillon_char* M;
  30 + int i;
  31 + M = L->tete;
  32 + for(i = 0; i < (L->nbchar); i++){
  33 + printf("%c",M->value);
  34 + M = M->next;
  35 + }
  36 + }
  37 + printf("\n");
  38 +}
  39 +
  40 +
  41 +/*
  42 + * Ajout d'un char en entête de liste
  43 + */
  44 +void ajouter_en_tete_liste_char (struct liste_char* L, char c){
  45 +
  46 + struct maillon_char* nouveau;
  47 +
  48 + nouveau = (struct maillon_char*)malloc(sizeof(struct maillon_char));
  49 + if(nouveau == NIL){
  50 + fprintf(stderr,"error: NoMoreMemory");
  51 + exit(1);
  52 + }
  53 +
  54 + nouveau->value= c;
  55 + nouveau->next=L->tete;
  56 + L->tete=nouveau;
  57 + L->nbchar +=1;
  58 +
  59 +}
  60 +
  61 +void ajouter_en_queue_liste_char (struct liste_char* L, char c){
  62 + if(L->tete == NIL){
  63 + ajouter_en_tete_liste_char (L, c);
  64 + }
  65 + struct maillon_char* nouveau;
  66 +
  67 + nouveau = (struct maillon_char*)malloc(sizeof(struct maillon_char));
  68 + if(nouveau == NIL){
  69 + fprintf(stderr,"error: NoMoreMemory");
  70 + exit(1);
  71 + }
  72 + struct maillon_char* m;
  73 + m=L->tete;
  74 + while(m->next!=NIL){
  75 + m=m->next;
  76 + }
  77 + nouveau->value=c;
  78 + nouveau->next=NIL;
  79 + m->next=nouveau;
  80 + L->nbchar +=1;
  81 +
  82 +}
SD/TP1_suite/liste_char.h 0 → 100644
@@ -0,0 +1,56 @@ @@ -0,0 +1,56 @@
  1 +#if ! defined (LISTE_CHAR_H)
  2 +#define LISTE_CHAR_H 1
  3 +
  4 +struct maillon_char
  5 +{ char value;
  6 + struct maillon_char* next;
  7 +};
  8 +
  9 +struct liste_char
  10 +{ struct maillon_char* tete;
  11 + int nbchar;
  12 +};
  13 +
  14 +#define NIL (struct maillon_char*)0
  15 +
  16 +/*
  17 + * Constructeur
  18 + * Initialise son paramètre à la liste vide
  19 + */
  20 +extern void init_liste_char (struct liste_char*);
  21 +
  22 +/*
  23 + * Destructeur
  24 + */
  25 +extern void clear_liste_char (struct liste_char*);
  26 +
  27 +/*
  28 + * Ajout d'un char en entête de liste
  29 + */
  30 +extern void ajouter_en_tete_liste_char (struct liste_char*, char);
  31 +
  32 +
  33 +/*
  34 + * Ajout d'un char en queue de liste
  35 + */
  36 +extern void ajouter_en_queue_liste_char (struct liste_char*, char);
  37 +
  38 +
  39 +/*
  40 + * Affecte à *d la valeur du premier élément de L et supprime cet élément de L.
  41 + * La liste L est supposée non vide.
  42 + */
  43 +extern void extraire_tete_liste_char (char* d, struct liste_char* L);
  44 +
  45 +/*
  46 + * Impression.
  47 + */
  48 +extern void imprimer_liste_char (struct liste_char*);
  49 +
  50 +/*
  51 + * Copie liste dst -> source
  52 + */
  53 +extern void set_liste_char
  54 + (struct liste_char* dst, struct liste_char* src);
  55 +
  56 +#endif
SD/TP1_suite/liste_char.o 0 → 100644
No preview for this file type
SD/TP1_suite/liste_double.tgz 0 → 100644
No preview for this file type
SD/TP1_suite/liste_double/Makefile 0 → 100644
@@ -0,0 +1,12 @@ @@ -0,0 +1,12 @@
  1 +CC=gcc
  2 +CFLAGS=-g -Wall -Wmissing-prototypes
  3 +LDFLAGS=-g
  4 +objects := $(patsubst %.c,%.o,$(wildcard *.c))
  5 +all: main
  6 +clean:
  7 + -rm $(objects)
  8 + -rm main
  9 +main: $(objects)
  10 +# gcc -MM *.c pour obtenir les deux lignes ci-dessous
  11 +liste_double.o: liste_double.c liste_double.h
  12 +main.o: main.c liste_double.h
SD/TP1_suite/liste_double/liste_double.c 0 → 100644
@@ -0,0 +1,105 @@ @@ -0,0 +1,105 @@
  1 +#include <stdio.h>
  2 +#include <stdlib.h>
  3 +#include <assert.h>
  4 +#include "liste_double.h"
  5 +
  6 +void init_liste_double (struct liste_double* L)
  7 +{
  8 + L->tete = (struct maillon_double*)0;
  9 + L->nbelem = 0;
  10 +}
  11 +
  12 +void ajouter_en_tete_liste_double (struct liste_double* L, double d)
  13 +{ struct maillon_double* nouveau;
  14 +
  15 + nouveau = (struct maillon_double*)malloc (sizeof (struct maillon_double));
  16 + assert (nouveau != (struct maillon_double*)0);
  17 +/* appeler ici un éventuel constructeur pour nouveau->value */
  18 + nouveau->value = d; /* affectation de la valeur */
  19 + nouveau->next = L->tete;
  20 + L->tete = nouveau;
  21 + L->nbelem += 1;
  22 +}
  23 +
  24 +void clear_liste_double (struct liste_double* L)
  25 +{ struct maillon_double* courant;
  26 + struct maillon_double* suivant;
  27 + int i;
  28 +
  29 + courant = L->tete;
  30 + for (i = 0; i < L->nbelem; i++)
  31 + { suivant = courant->next;
  32 +/* appeler ici un éventuel destructeur pour nouveau->value */
  33 + free (courant);
  34 + courant = suivant;
  35 + }
  36 +}
  37 +
  38 +/*
  39 + * Sous-fonction de set_liste_double.
  40 + * Si L = [m1, m2, ..., mn] avant l'appel alors
  41 + * L = [mn, ..., m2, m1] après l'appel.
  42 + * Aucune allocation dynamique n'est effectuée.
  43 + * Seuls les pointeurs sont modifiés
  44 + */
  45 +
  46 +static void retourner_liste_double (struct liste_double* L)
  47 +{ struct maillon_double *precedent, *courant, *suivant;
  48 + int i;
  49 +
  50 + if (L->nbelem >= 2)
  51 + { courant = L->tete;
  52 + suivant = courant->next;
  53 + courant->next = (struct maillon_double*)0;
  54 + for (i = 1; i < L->nbelem; i++)
  55 + { precedent = courant;
  56 + courant = suivant;
  57 + suivant = suivant->next;
  58 + courant->next = precedent;
  59 + }
  60 + L->tete = courant;
  61 + }
  62 +}
  63 +
  64 +void set_liste_double (struct liste_double* dst, struct liste_double* src)
  65 +{ struct maillon_double* M;
  66 + int i;
  67 +
  68 + if (dst != src)
  69 + { clear_liste_double (dst);
  70 + init_liste_double (dst);
  71 + M = src->tete;
  72 + for (i = 0; i < src->nbelem; i++)
  73 + { ajouter_en_tete_liste_double (dst, M->value);
  74 + M = M->next;
  75 + }
  76 + retourner_liste_double (dst);
  77 + }
  78 +}
  79 +
  80 +void extraire_tete_liste_double (double* d, struct liste_double* L)
  81 +{ struct maillon_double* tete;
  82 +
  83 + assert (L->nbelem != 0);
  84 + tete = L->tete;
  85 + *d = tete->value; /* affectation */
  86 + L->tete = tete->next;
  87 + L->nbelem -= 1;
  88 + free (tete);
  89 +}
  90 +
  91 +void imprimer_liste_double (struct liste_double* L)
  92 +{ struct maillon_double* M;
  93 + int i;
  94 +
  95 + printf ("[");
  96 + M = L->tete;
  97 + for (i = 0; i < L->nbelem; i++)
  98 + { if (i == 0)
  99 + printf ("%f", M->value);
  100 + else
  101 + printf (", %f", M->value);
  102 + M = M->next;
  103 + }
  104 + printf ("]\n");
  105 +}
SD/TP1_suite/liste_double/liste_double.h 0 → 100644
@@ -0,0 +1,72 @@ @@ -0,0 +1,72 @@
  1 +#if ! defined (LISTE_DOUBLE_H)
  2 +#define LISTE_DOUBLE_H 1
  3 +
  4 +/**********************************************************************
  5 + * IMPLANTATION
  6 + *
  7 + * Spécification de l'implantation
  8 + *
  9 + * Implantation des listes simplement chaînées de doubles
  10 + *
  11 + * Les maillons sont alloués dynamiquement.
  12 + * Le champ next du dernier maillon vaut (struct maillon_double*)0
  13 + *
  14 + * Le champ tete d'une liste pointe vers le premier maillon
  15 + * Le champ nbelem est égal au nombre de maillons de la liste
  16 + * La liste vide est codée par (tete, nbelem) = ((struct maillon_double*)0, 0)
  17 + *
  18 + * Des listes distinctes ont des maillons distincts (pas de maillon partagé).
  19 + **********************************************************************/
  20 +
  21 +struct maillon_double
  22 +{ double value;
  23 + struct maillon_double* next;
  24 +};
  25 +
  26 +struct liste_double
  27 +{ struct maillon_double* tete;
  28 + int nbelem;
  29 +};
  30 +
  31 +/**********************************************************************
  32 + * PROTOTYPES DES FONCTIONS (TYPE ABSTRAIT)
  33 + **********************************************************************/
  34 +
  35 +/*
  36 + * Constructeur. Initialise son paramètre à la liste vide
  37 + */
  38 +
  39 +extern void init_liste_double (struct liste_double*);
  40 +
  41 +/*
  42 + * Destructeur
  43 + */
  44 +
  45 +extern void clear_liste_double (struct liste_double*);
  46 +
  47 +/*
  48 + * Affecte une copie de src à dst
  49 + */
  50 +
  51 +extern void set_liste_double
  52 + (struct liste_double* dst, struct liste_double* src);
  53 +
  54 +/*
  55 + * Ajout d'un double en tête de liste
  56 + */
  57 +
  58 +extern void ajouter_en_tete_liste_double (struct liste_double*, double);
  59 +
  60 +/*
  61 + * Affecte à *d la valeur du premier élément de L et supprime cet élément de L.
  62 + * La liste L est supposée non vide.
  63 + */
  64 +
  65 +extern void extraire_tete_liste_double (double* d, struct liste_double* L);
  66 +
  67 +/*
  68 + * Impression.
  69 + */
  70 +
  71 +extern void imprimer_liste_double (struct liste_double*);
  72 +#endif
SD/TP1_suite/liste_double/main.c 0 → 100644
@@ -0,0 +1,16 @@ @@ -0,0 +1,16 @@
  1 +#include "liste_double.h"
  2 +
  3 +int main ()
  4 +{ struct liste_double A;
  5 +
  6 + init_liste_double (&A);
  7 +
  8 + ajouter_en_tete_liste_double (&A, -0.1);
  9 + ajouter_en_tete_liste_double (&A, 0.0);
  10 + ajouter_en_tete_liste_double (&A, 3.14);
  11 +
  12 + imprimer_liste_double (&A);
  13 +
  14 + clear_liste_double (&A);
  15 + return 0;
  16 +}
SD/TP1_suite/main.c 0 → 100644
@@ -0,0 +1,42 @@ @@ -0,0 +1,42 @@
  1 +#include <stdio.h>
  2 +#include <ctype.h>
  3 +#include <stdlib.h>
  4 +#include "chaine.h"
  5 +#include "liste_char.h"
  6 +
  7 +
  8 +
  9 +
  10 +int main(){
  11 +
  12 +
  13 +char a ='a';
  14 +char b ='b';
  15 +struct chaine A;
  16 +init_chaine(&A);
  17 +imprime_chaine(&A);
  18 +ajout_chaine(&A,a);
  19 +ajoutQueue_chaine(&A,b);
  20 +ajoutQueue_chaine(&A,a);
  21 +imprime_chaine(&A);
  22 +clear_chaine(&A);
  23 +return(0);
  24 +}
  25 +
  26 +
  27 +/*
  28 +//Main de test liste_char
  29 +int main(){
  30 +struct liste_char L;
  31 +init_liste_char(&L);
  32 +imprimer_liste_char(&L);
  33 +
  34 +ajouter_en_tete_liste_char(&L, 'c');
  35 +ajouter_en_tete_liste_char(&L, 'b');
  36 +ajouter_en_queue_liste_char(&L, 'b');
  37 +ajouter_en_queue_liste_char(&L, 'a');
  38 +imprimer_liste_char(&L);
  39 +clear_liste_char(&L);
  40 +
  41 +return(0);
  42 +}*/
SD/TP1_suite/main.o 0 → 100644
No preview for this file type
SD/TP1_suite/prog 0 → 100755
No preview for this file type
@@ -170,7 +170,7 @@ int main(int argc, char *argv[]){ @@ -170,7 +170,7 @@ int main(int argc, char *argv[]){
170 printf("Le nouveau numero de %s sera: %s\n",argv[2], argv[3]); 170 printf("Le nouveau numero de %s sera: %s\n",argv[2], argv[3]);
171 } else if ( argc == 3 && strcmp(argv[1],"supprimer")==0 ){ 171 } else if ( argc == 3 && strcmp(argv[1],"supprimer")==0 ){
172 deletePers(argv[2],&annuaire); 172 deletePers(argv[2],&annuaire);
173 - } else if ( argc != 7 && strcmp(argv[1],"ajouter")==0 ){ 173 + } else if ( argc ==8 && strcmp(argv[1],"ajouter")==0 ){
174 ///annuaire ajouter Dupont 01 01 2011 0328753542 174 ///annuaire ajouter Dupont 01 01 2011 0328753542
175 175
176 Personne p; 176 Personne p;
Tp7_Struct/Tp7.o
No preview for this file type
Tp7_Struct/prog
No preview for this file type
TpSD3_Karatsuba/.Karatsuba.c.kate-swp 0 → 100644
No preview for this file type
TpSD3_Karatsuba/Elementaire.stats 0 → 100644
@@ -0,0 +1,600 @@ @@ -0,0 +1,600 @@
  1 +# n f(n)
  2 + 1 2
  3 + 2 11
  4 + 3 33
  5 + 4 46
  6 + 5 94
  7 + 6 120
  8 + 7 150
  9 + 8 167
  10 + 9 267
  11 + 10 319
  12 + 11 375
  13 + 12 405
  14 + 13 469
  15 + 14 503
  16 + 15 541
  17 + 16 562
  18 + 17 766
  19 + 18 870
  20 + 19 978
  21 + 20 1034
  22 + 21 1150
  23 + 22 1210
  24 + 23 1274
  25 + 24 1308
  26 + 25 1440
  27 + 26 1508
  28 + 27 1580
  29 + 28 1618
  30 + 29 1698
  31 + 30 1740
  32 + 31 1786
  33 + 32 1811
  34 + 33 2223
  35 + 34 2431
  36 + 35 2643
  37 + 36 2751
  38 + 37 2971
  39 + 38 3083
  40 + 39 3199
  41 + 40 3259
  42 + 41 3495
  43 + 42 3615
  44 + 43 3739
  45 + 44 3803
  46 + 45 3935
  47 + 46 4003
  48 + 47 4075
  49 + 48 4113
  50 + 49 4381
  51 + 50 4517
  52 + 51 4657
  53 + 52 4729
  54 + 53 4877
  55 + 54 4953
  56 + 55 5033
  57 + 56 5075
  58 + 57 5239
  59 + 58 5323
  60 + 59 5411
  61 + 60 5457
  62 + 61 5553
  63 + 62 5603
  64 + 63 5657
  65 + 64 5686
  66 + 65 6514
  67 + 66 6930
  68 + 67 7350
  69 + 68 7562
  70 + 69 7990
  71 + 70 8206
  72 + 71 8426
  73 + 72 8538
  74 + 73 8982
  75 + 74 9206
  76 + 75 9434
  77 + 76 9550
  78 + 77 9786
  79 + 78 9906
  80 + 79 10030
  81 + 80 10094
  82 + 81 10570
  83 + 82 10810
  84 + 83 11054
  85 + 84 11178
  86 + 85 11430
  87 + 86 11558
  88 + 87 11690
  89 + 88 11758
  90 + 89 12026
  91 + 90 12162
  92 + 91 12302
  93 + 92 12374
  94 + 93 12522
  95 + 94 12598
  96 + 95 12678
  97 + 96 12720
  98 + 97 13260
  99 + 98 13532
  100 + 99 13808
  101 + 100 13948
  102 + 101 14232
  103 + 102 14376
  104 + 103 14524
  105 + 104 14600
  106 + 105 14900
  107 + 106 15052
  108 + 107 15208
  109 + 108 15288
  110 + 109 15452
  111 + 110 15536
  112 + 111 15624
  113 + 112 15670
  114 + 113 16002
  115 + 114 16170
  116 + 115 16342
  117 + 116 16430
  118 + 117 16610
  119 + 118 16702
  120 + 119 16798
  121 + 120 16848
  122 + 121 17044
  123 + 122 17144
  124 + 123 17248
  125 + 124 17302
  126 + 125 17414
  127 + 126 17472
  128 + 127 17534
  129 + 128 17567
  130 + 129 19227
  131 + 130 20059
  132 + 131 20895
  133 + 132 21315
  134 + 133 22159
  135 + 134 22583
  136 + 135 23011
  137 + 136 23227
  138 + 137 24087
  139 + 138 24519
  140 + 139 24955
  141 + 140 25175
  142 + 141 25619
  143 + 142 25843
  144 + 143 26071
  145 + 144 26187
  146 + 145 27079
  147 + 146 27527
  148 + 147 27979
  149 + 148 28207
  150 + 149 28667
  151 + 150 28899
  152 + 151 29135
  153 + 152 29255
  154 + 153 29731
  155 + 154 29971
  156 + 155 30215
  157 + 156 30339
  158 + 157 30591
  159 + 158 30719
  160 + 159 30851
  161 + 160 30919
  162 + 161 31875
  163 + 162 32355
  164 + 163 32839
  165 + 164 33083
  166 + 165 33575
  167 + 166 33823
  168 + 167 34075
  169 + 168 34203
  170 + 169 34711
  171 + 170 34967
  172 + 171 35227
  173 + 172 35359
  174 + 173 35627
  175 + 174 35763
  176 + 175 35903
  177 + 176 35975
  178 + 177 36515
  179 + 178 36787
  180 + 179 37063
  181 + 180 37203
  182 + 181 37487
  183 + 182 37631
  184 + 183 37779
  185 + 184 37855
  186 + 185 38155
  187 + 186 38307
  188 + 187 38463
  189 + 188 38543
  190 + 189 38707
  191 + 190 38791
  192 + 191 38879
  193 + 192 38925
  194 + 193 40009
  195 + 194 40553
  196 + 195 41101
  197 + 196 41377
  198 + 197 41933
  199 + 198 42213
  200 + 199 42497
  201 + 200 42641
  202 + 201 43213
  203 + 202 43501
  204 + 203 43793
  205 + 204 43941
  206 + 205 44241
  207 + 206 44393
  208 + 207 44549
  209 + 208 44629
  210 + 209 45233
  211 + 210 45537
  212 + 211 45845
  213 + 212 46001
  214 + 213 46317
  215 + 214 46477
  216 + 215 46641
  217 + 216 46725
  218 + 217 47057
  219 + 218 47225
  220 + 219 47397
  221 + 220 47485
  222 + 221 47665
  223 + 222 47757
  224 + 223 47853
  225 + 224 47903
  226 + 225 48571
  227 + 226 48907
  228 + 227 49247
  229 + 228 49419
  230 + 229 49767
  231 + 230 49943
  232 + 231 50123
  233 + 232 50215
  234 + 233 50579
  235 + 234 50763
  236 + 235 50951
  237 + 236 51047
  238 + 237 51243
  239 + 238 51343
  240 + 239 51447
  241 + 240 51501
  242 + 241 51897
  243 + 242 52097
  244 + 243 52301
  245 + 244 52405
  246 + 245 52617
  247 + 246 52725
  248 + 247 52837
  249 + 248 52895
  250 + 249 53123
  251 + 250 53239
  252 + 251 53359
  253 + 252 53421
  254 + 253 53549
  255 + 254 53615
  256 + 255 53685
  257 + 256 53722
  258 + 257 57046
  259 + 258 58710
  260 + 259 60378
  261 + 260 61214
  262 + 261 62890
  263 + 262 63730
  264 + 263 64574
  265 + 264 64998
  266 + 265 66690
  267 + 266 67538
  268 + 267 68390
  269 + 268 68818
  270 + 269 69678
  271 + 270 70110
  272 + 271 70546
  273 + 272 70766
  274 + 273 72490
  275 + 274 73354
  276 + 275 74222
  277 + 276 74658
  278 + 277 75534
  279 + 278 75974
  280 + 279 76418
  281 + 280 76642
  282 + 281 77534
  283 + 282 77982
  284 + 283 78434
  285 + 284 78662
  286 + 285 79122
  287 + 286 79354
  288 + 287 79590
  289 + 288 79710
  290 + 289 81498
  291 + 290 82394
  292 + 291 83294
  293 + 292 83746
  294 + 293 84654
  295 + 294 85110
  296 + 295 85570
  297 + 296 85802
  298 + 297 86726
  299 + 298 87190
  300 + 299 87658
  301 + 300 87894
  302 + 301 88370
  303 + 302 88610
  304 + 303 88854
  305 + 304 88978
  306 + 305 89934
  307 + 306 90414
  308 + 307 90898
  309 + 308 91142
  310 + 309 91634
  311 + 310 91882
  312 + 311 92134
  313 + 312 92262
  314 + 313 92770
  315 + 314 93026
  316 + 315 93286
  317 + 316 93418
  318 + 317 93686
  319 + 318 93822
  320 + 319 93962
  321 + 320 94034
  322 + 321 95950
  323 + 322 96910
  324 + 323 97874
  325 + 324 98358
  326 + 325 99330
  327 + 326 99818
  328 + 327 100310
  329 + 328 100558
  330 + 329 101546
  331 + 330 102042
  332 + 331 102542
  333 + 332 102794
  334 + 333 103302
  335 + 334 103558
  336 + 335 103818
  337 + 336 103950
  338 + 337 104970
  339 + 338 105482
  340 + 339 105998
  341 + 340 106258
  342 + 341 106782
  343 + 342 107046
  344 + 343 107314
  345 + 344 107450
  346 + 345 107990
  347 + 346 108262
  348 + 347 108538
  349 + 348 108678
  350 + 349 108962
  351 + 350 109106
  352 + 351 109254
  353 + 352 109330
  354 + 353 110414
  355 + 354 110958
  356 + 355 111506
  357 + 356 111782
  358 + 357 112338
  359 + 358 112618
  360 + 359 112902
  361 + 360 113046
  362 + 361 113618
  363 + 362 113906
  364 + 363 114198
  365 + 364 114346
  366 + 365 114646
  367 + 366 114798
  368 + 367 114954
  369 + 368 115034
  370 + 369 115638
  371 + 370 115942
  372 + 371 116250
  373 + 372 116406
  374 + 373 116722
  375 + 374 116882
  376 + 375 117046
  377 + 376 117130
  378 + 377 117462
  379 + 378 117630
  380 + 379 117802
  381 + 380 117890
  382 + 381 118070
  383 + 382 118162
  384 + 383 118258
  385 + 384 118308
  386 + 385 120480
  387 + 386 121568
  388 + 387 122660
  389 + 388 123208
  390 + 389 124308
  391 + 390 124860
  392 + 391 125416
  393 + 392 125696
  394 + 393 126812
  395 + 394 127372
  396 + 395 127936
  397 + 396 128220
  398 + 397 128792
  399 + 398 129080
  400 + 399 129372
  401 + 400 129520
  402 + 401 130668
  403 + 402 131244
  404 + 403 131824
  405 + 404 132116
  406 + 405 132704
  407 + 406 133000
  408 + 407 133300
  409 + 408 133452
  410 + 409 134056
  411 + 410 134360
  412 + 411 134668
  413 + 412 134824
  414 + 413 135140
  415 + 414 135300
  416 + 415 135464
  417 + 416 135548
  418 + 417 136760
  419 + 418 137368
  420 + 419 137980
  421 + 420 138288
  422 + 421 138908
  423 + 422 139220
  424 + 423 139536
  425 + 424 139696
  426 + 425 140332
  427 + 426 140652
  428 + 427 140976
  429 + 428 141140
  430 + 429 141472
  431 + 430 141640
  432 + 431 141812
  433 + 432 141900
  434 + 433 142568
  435 + 434 142904
  436 + 435 143244
  437 + 436 143416
  438 + 437 143764
  439 + 438 143940
  440 + 439 144120
  441 + 440 144212
  442 + 441 144576
  443 + 442 144760
  444 + 443 144948
  445 + 444 145044
  446 + 445 145240
  447 + 446 145340
  448 + 447 145444
  449 + 448 145498
  450 + 449 146838
  451 + 450 147510
  452 + 451 148186
  453 + 452 148526
  454 + 453 149210
  455 + 454 149554
  456 + 455 149902
  457 + 456 150078
  458 + 457 150778
  459 + 458 151130
  460 + 459 151486
  461 + 460 151666
  462 + 461 152030
  463 + 462 152214
  464 + 463 152402
  465 + 464 152498
  466 + 465 153230
  467 + 466 153598
  468 + 467 153970
  469 + 468 154158
  470 + 469 154538
  471 + 470 154730
  472 + 471 154926
  473 + 472 155026
  474 + 473 155422
  475 + 474 155622
  476 + 475 155826
  477 + 476 155930
  478 + 477 156142
  479 + 478 156250
  480 + 479 156362
  481 + 480 156420
  482 + 481 157216
  483 + 482 157616
  484 + 483 158020
  485 + 484 158224
  486 + 485 158636
  487 + 486 158844
  488 + 487 159056
  489 + 488 159164
  490 + 489 159592
  491 + 490 159808
  492 + 491 160028
  493 + 492 160140
  494 + 493 160368
  495 + 494 160484
  496 + 495 160604
  497 + 496 160666
  498 + 497 161126
  499 + 498 161358
  500 + 499 161594
  501 + 500 161714
  502 + 501 161958
  503 + 502 162082
  504 + 503 162210
  505 + 504 162276
  506 + 505 162536
  507 + 506 162668
  508 + 507 162804
  509 + 508 162874
  510 + 509 163018
  511 + 510 163092
  512 + 511 163170
  513 + 512 163211
  514 + 513 169863
  515 + 514 173191
  516 + 515 176523
  517 + 516 178191
  518 + 517 181531
  519 + 518 183203
  520 + 519 184879
  521 + 520 185719
  522 + 521 189075
  523 + 522 190755
  524 + 523 192439
  525 + 524 193283
  526 + 525 194975
  527 + 526 195823
  528 + 527 196675
  529 + 528 197103
  530 + 529 200491
  531 + 530 202187
  532 + 531 203887
  533 + 532 204739
  534 + 533 206447
  535 + 534 207303
  536 + 535 208163
  537 + 536 208595
  538 + 537 210319
  539 + 538 211183
  540 + 539 212051
  541 + 540 212487
  542 + 541 213363
  543 + 542 213803
  544 + 543 214247
  545 + 544 214471
  546 + 545 217923
  547 + 546 219651
  548 + 547 221383
  549 + 548 222251
  550 + 549 223991
  551 + 550 224863
  552 + 551 225739
  553 + 552 226179
  554 + 553 227935
  555 + 554 228815
  556 + 555 229699
  557 + 556 230143
  558 + 557 231035
  559 + 558 231483
  560 + 559 231935
  561 + 560 232163
  562 + 561 233951
  563 + 562 234847
  564 + 563 235747
  565 + 564 236199
  566 + 565 237107
  567 + 566 237563
  568 + 567 238023
  569 + 568 238255
  570 + 569 239179
  571 + 570 239643
  572 + 571 240111
  573 + 572 240347
  574 + 573 240823
  575 + 574 241063
  576 + 575 241307
  577 + 576 241431
  578 + 577 245011
  579 + 578 246803
  580 + 579 248599
  581 + 580 249499
  582 + 581 251303
  583 + 582 252207
  584 + 583 253115
  585 + 584 253571
  586 + 585 255391
  587 + 586 256303
  588 + 587 257219
  589 + 588 257679
  590 + 589 258603
  591 + 590 259067
  592 + 591 259535
  593 + 592 259771
  594 + 593 261623
  595 + 594 262551
  596 + 595 263483
  597 + 596 263951
  598 + 597 264891
  599 + 598 265363
  600 + 599 265839
TpSD3_Karatsuba/Karatsuba.c 0 → 100644
@@ -0,0 +1,258 @@ @@ -0,0 +1,258 @@
  1 +#include <stdlib.h>
  2 +#include <stdio.h>
  3 +#include <stdbool.h>
  4 +#include <math.h>
  5 +#include <assert.h>
  6 +
  7 +/*
  8 + * Représentation élémentaire d'un polynôme.
  9 + * On pourrait, au minimum, rajouter le degré !
  10 + */
  11 +
  12 +struct poly
  13 +{ double* T; /* le tableau des coefficients */
  14 + bool dynamic; /* indique si T a été alloué dynamiquement */
  15 + int n; /* la taille du tableau */
  16 +};
  17 +
  18 +/*
  19 + * Constructeur. Le tableau T est alloué dynamiquement
  20 + */
  21 +void init_poly (struct poly* A, int n)
  22 +{
  23 + A->T = (double*)malloc (n * sizeof (double));
  24 + assert (A->T != (double*)0);
  25 + A->n = n;
  26 + A->dynamic = true;
  27 +}
  28 +
  29 +/*
  30 + * Autre constructeur. Le tableau T est passé en paramètre.
  31 + * Il n'est donc pas alloué dynamiquement
  32 + */
  33 +void init2_poly (struct poly* A, double* T, int n)
  34 +{
  35 + A->T = T;
  36 + A->n = n;
  37 + A->dynamic = false;
  38 +}
  39 +
  40 +/*
  41 + * Destructeur.
  42 + */
  43 +void clear_poly (struct poly* A)
  44 +{
  45 + if (A->dynamic)
  46 + free (A->T);
  47 +}
  48 +
  49 +/*
  50 + * L'impression d'un polynôme est plus technique qu'on ne le croit :-)
  51 + * On suppose que les doubles sont en fait des entiers
  52 + */
  53 +void print_poly (struct poly* A)
  54 +{ long c;
  55 + int i;
  56 + bool b;
  57 +
  58 + b = false;
  59 + for (i = A->n - 1; i >= 0; i--)
  60 + { if (A->T[i] != 0.0)
  61 + { if (A->T[i] > 0)
  62 + { if (b) printf (" + ");
  63 + } else
  64 + { if (b) printf (" - "); else printf ("-");
  65 + }
  66 + b = true;
  67 + if (A->T[i] > 0) c = (long)A->T[i]; else c = (long) - A->T[i];
  68 + if (i == 0)
  69 + printf ("%ld", c);
  70 + else if (i == 1)
  71 + { if (c != 1) printf ("%ld*x", c); else printf ("x");
  72 + } else
  73 + { if (c != 1) printf ("%ld*x^%d", c, i); else printf ("x^%d", i);
  74 + }
  75 + }
  76 + }
  77 + printf ("\n");
  78 +}
  79 +
  80 +/*
  81 + * R = A + B
  82 + */
  83 +int add_poly (struct poly* R, struct poly* A, struct poly* B)
  84 +{
  85 + int nbOpe=0;
  86 + int i;
  87 + i = 0;
  88 + while (i < A->n && i < B->n)
  89 + { R->T[i] = A->T[i] + B->T[i];
  90 + i += 1;
  91 + nbOpe+=1;
  92 + }
  93 + while (i < A->n)
  94 + { R->T[i] = A->T[i];
  95 + i += 1;
  96 + }
  97 + while (i < B->n)
  98 + { R->T[i] = B->T[i];
  99 + i += 1;
  100 + }
  101 + while (i < R->n)
  102 + { R->T[i] = 0.0;
  103 + i += 1;
  104 + }
  105 + return nbOpe;
  106 +}
  107 +
  108 +/*
  109 + * R = A - B
  110 + */
  111 +int sub_poly (struct poly* R, struct poly* A, struct poly* B)
  112 +{
  113 + int nbOpe=0;
  114 + int i;
  115 + i = 0;
  116 + while (i < A->n && i < B->n)
  117 + { R->T[i] = A->T[i] - B->T[i];
  118 + i += 1;
  119 + nbOpe+=1;
  120 + }
  121 + while (i < A->n)
  122 + { R->T[i] = A->T[i];
  123 + i += 1;
  124 + }
  125 + while (i < B->n)
  126 + { R->T[i] = - B->T[i];
  127 + i += 1;
  128 + }
  129 + while (i < R->n)
  130 + { R->T[i] = 0.0;
  131 + i += 1;
  132 + }
  133 + return nbOpe;
  134 +}
  135 +
  136 +/*
  137 + * R = A * B par la méthode élémentaire
  138 + */
  139 +int mul_poly (struct poly* R, struct poly* A, struct poly* B)
  140 +{
  141 + int nbOpe=0;
  142 + int a, b;
  143 + for (a = 0; a < R->n; a++)
  144 + R->T[a] = 0.0;
  145 + for (a = 0; a < A->n; a++){
  146 + for (b = 0; b < B->n; b++){
  147 + R->T[a+b] = R->T[a+b] + A->T[a] * B->T[b];
  148 + nbOpe+=2;
  149 + }
  150 + }
  151 + return nbOpe;
  152 +}
  153 +
  154 +/*
  155 + * R = A * B par la méthode de Karatsuba
  156 + */
  157 +int Karatsuba (struct poly* R, struct poly* A, struct poly* B)
  158 +{ struct poly R0, R1, R2, A0, A1, B0, B1, tmpA, tmpB;
  159 + int i, p, q;
  160 + int nbOpe =0;
  161 +
  162 +/*
  163 + * L'algorithme élémentaire est utilisé pour les cas de base
  164 + */
  165 + if (A->n == 1 || B->n == 1)
  166 + nbOpe+=mul_poly (R, A, B);
  167 + else
  168 + {
  169 + if (A->n < B->n)
  170 + p = A->n/2;
  171 + else
  172 + p = B->n/2;
  173 +/*
  174 + * Découper les polynômes A et B en deux se fait en temps constant
  175 + */
  176 + init2_poly (&A0, A->T, p);
  177 + init2_poly (&A1, A->T + p, A->n - p);
  178 + init2_poly (&B0, B->T, p);
  179 + init2_poly (&B1, B->T + p, B->n - p);
  180 +/*
  181 + * Les polynômes R0 et R2 sont des sous-tableaux de R.
  182 + * On évite ainsi deux recopies de tableaux.
  183 + */
  184 + init2_poly (&R0, R->T, 2*p-1);
  185 + init2_poly (&R2, R->T + 2*p, A->n + B->n - 1 - 2*p);
  186 + nbOpe+=Karatsuba (&R0, &A0, &B0);
  187 + nbOpe+=Karatsuba (&R2, &A1, &B1);
  188 +/*
  189 + * À ce stade, R = R0 + x^(2*p)*R2. On calcule maintenant R1.
  190 + */
  191 + if (A0.n > A1.n) q = A0.n; else q = A1.n;
  192 + init_poly (&tmpA, q);
  193 + nbOpe+= add_poly (&tmpA, &A0, &A1);
  194 + if (B0.n > B1.n) q = B0.n; else q = B1.n;
  195 + init_poly (&tmpB, q);
  196 + nbOpe+=add_poly (&tmpB, &B0, &B1);
  197 + q = tmpA.n + tmpB.n - 1;
  198 + if (q < R0.n) q = R0.n;
  199 + if (q < R2.n) q = R2.n;
  200 + init_poly (&R1, q);
  201 + nbOpe+= Karatsuba (&R1, &tmpA, &tmpB);
  202 + nbOpe+= sub_poly (&R1, &R1, &R0);
  203 + nbOpe+= sub_poly (&R1, &R1, &R2);
  204 +/*
  205 + * R = R + x^p*R1
  206 + */
  207 + R->T[2*p-1] = 0;
  208 + for (i = 0; i < R1.n; i++){
  209 + R->T[p+i] = R->T[p+i] + R1.T[i];
  210 + nbOpe++;
  211 + }
  212 +
  213 + clear_poly (&A0);
  214 + clear_poly (&A1);
  215 + clear_poly (&B0);
  216 + clear_poly (&B1);
  217 + clear_poly (&R0);
  218 + clear_poly (&R1);
  219 + clear_poly (&R2);
  220 + clear_poly (&tmpA);
  221 + clear_poly (&tmpB);
  222 + }
  223 + return nbOpe;
  224 +}
  225 +
  226 +int main ()
  227 +{ struct poly A, B, R;
  228 + int i, n, N;
  229 + int nbOpe =0;
  230 + int nbNumPoly=0;
  231 + srand48 ((long)421);
  232 +
  233 + N = 600; /* taille des polynômes */
  234 + init_poly (&A, N);
  235 + init_poly (&B, N);
  236 + init_poly (&R, 2*N-1);
  237 + for (i = 0; i < N; i++)
  238 + {
  239 + A.T [i] = floor (10.0 * drand48 () - 5.0);
  240 + B.T [i] = floor (10.0 * drand48 () - 5.0);
  241 + }
  242 + printf("#\tn\tf(n)\n");
  243 + for (n = 1; n < N; n++)
  244 + {
  245 + nbOpe=0;
  246 + nbNumPoly=0;
  247 + A.n = n;
  248 + B.n = n;
  249 + nbNumPoly=mul_poly (&R, &A, &B);
  250 + //print_poly (&R);
  251 + nbOpe=Karatsuba (&R, &A, &B);
  252 + //print_poly (&R);
  253 + // printf("\t%d\t%d",n, nbNumPoly);
  254 + printf("\t%d\t%d\n",n, nbOpe);
  255 +
  256 + }
  257 +
  258 +}
TpSD3_Karatsuba/Karatsuba.stats 0 → 100644
@@ -0,0 +1,600 @@ @@ -0,0 +1,600 @@
  1 +# n f(n)
  2 + 1 2
  3 + 2 11
  4 + 3 33
  5 + 4 46
  6 + 5 94
  7 + 6 120
  8 + 7 150
  9 + 8 167
  10 + 9 267
  11 + 10 319
  12 + 11 375
  13 + 12 405
  14 + 13 469
  15 + 14 503
  16 + 15 541
  17 + 16 562
  18 + 17 766
  19 + 18 870
  20 + 19 978
  21 + 20 1034
  22 + 21 1150
  23 + 22 1210
  24 + 23 1274
  25 + 24 1308
  26 + 25 1440
  27 + 26 1508
  28 + 27 1580
  29 + 28 1618
  30 + 29 1698
  31 + 30 1740
  32 + 31 1786
  33 + 32 1811
  34 + 33 2223
  35 + 34 2431
  36 + 35 2643
  37 + 36 2751
  38 + 37 2971
  39 + 38 3083
  40 + 39 3199
  41 + 40 3259
  42 + 41 3495
  43 + 42 3615
  44 + 43 3739
  45 + 44 3803
  46 + 45 3935
  47 + 46 4003
  48 + 47 4075
  49 + 48 4113
  50 + 49 4381
  51 + 50 4517
  52 + 51 4657
  53 + 52 4729
  54 + 53 4877
  55 + 54 4953
  56 + 55 5033
  57 + 56 5075
  58 + 57 5239
  59 + 58 5323
  60 + 59 5411
  61 + 60 5457
  62 + 61 5553
  63 + 62 5603
  64 + 63 5657
  65 + 64 5686
  66 + 65 6514
  67 + 66 6930
  68 + 67 7350
  69 + 68 7562
  70 + 69 7990
  71 + 70 8206
  72 + 71 8426
  73 + 72 8538
  74 + 73 8982
  75 + 74 9206
  76 + 75 9434
  77 + 76 9550
  78 + 77 9786
  79 + 78 9906
  80 + 79 10030
  81 + 80 10094
  82 + 81 10570
  83 + 82 10810
  84 + 83 11054
  85 + 84 11178
  86 + 85 11430
  87 + 86 11558
  88 + 87 11690
  89 + 88 11758
  90 + 89 12026
  91 + 90 12162
  92 + 91 12302
  93 + 92 12374
  94 + 93 12522
  95 + 94 12598
  96 + 95 12678
  97 + 96 12720
  98 + 97 13260
  99 + 98 13532
  100 + 99 13808
  101 + 100 13948
  102 + 101 14232
  103 + 102 14376
  104 + 103 14524
  105 + 104 14600
  106 + 105 14900
  107 + 106 15052
  108 + 107 15208
  109 + 108 15288
  110 + 109 15452
  111 + 110 15536
  112 + 111 15624
  113 + 112 15670
  114 + 113 16002
  115 + 114 16170
  116 + 115 16342
  117 + 116 16430
  118 + 117 16610
  119 + 118 16702
  120 + 119 16798
  121 + 120 16848
  122 + 121 17044
  123 + 122 17144
  124 + 123 17248
  125 + 124 17302
  126 + 125 17414
  127 + 126 17472
  128 + 127 17534
  129 + 128 17567
  130 + 129 19227
  131 + 130 20059
  132 + 131 20895
  133 + 132 21315
  134 + 133 22159
  135 + 134 22583
  136 + 135 23011
  137 + 136 23227
  138 + 137 24087
  139 + 138 24519
  140 + 139 24955
  141 + 140 25175
  142 + 141 25619
  143 + 142 25843
  144 + 143 26071
  145 + 144 26187
  146 + 145 27079
  147 + 146 27527
  148 + 147 27979
  149 + 148 28207
  150 + 149 28667
  151 + 150 28899
  152 + 151 29135
  153 + 152 29255
  154 + 153 29731
  155 + 154 29971
  156 + 155 30215
  157 + 156 30339
  158 + 157 30591
  159 + 158 30719
  160 + 159 30851
  161 + 160 30919
  162 + 161 31875
  163 + 162 32355
  164 + 163 32839
  165 + 164 33083
  166 + 165 33575
  167 + 166 33823
  168 + 167 34075
  169 + 168 34203
  170 + 169 34711
  171 + 170 34967
  172 + 171 35227
  173 + 172 35359
  174 + 173 35627
  175 + 174 35763
  176 + 175 35903
  177 + 176 35975
  178 + 177 36515
  179 + 178 36787
  180 + 179 37063
  181 + 180 37203
  182 + 181 37487
  183 + 182 37631
  184 + 183 37779
  185 + 184 37855
  186 + 185 38155
  187 + 186 38307
  188 + 187 38463
  189 + 188 38543
  190 + 189 38707
  191 + 190 38791
  192 + 191 38879
  193 + 192 38925
  194 + 193 40009
  195 + 194 40553
  196 + 195 41101
  197 + 196 41377
  198 + 197 41933
  199 + 198 42213
  200 + 199 42497
  201 + 200 42641
  202 + 201 43213
  203 + 202 43501
  204 + 203 43793
  205 + 204 43941
  206 + 205 44241
  207 + 206 44393
  208 + 207 44549
  209 + 208 44629
  210 + 209 45233
  211 + 210 45537
  212 + 211 45845
  213 + 212 46001
  214 + 213 46317
  215 + 214 46477
  216 + 215 46641
  217 + 216 46725
  218 + 217 47057
  219 + 218 47225
  220 + 219 47397
  221 + 220 47485
  222 + 221 47665
  223 + 222 47757
  224 + 223 47853
  225 + 224 47903
  226 + 225 48571
  227 + 226 48907
  228 + 227 49247
  229 + 228 49419
  230 + 229 49767
  231 + 230 49943
  232 + 231 50123
  233 + 232 50215
  234 + 233 50579
  235 + 234 50763
  236 + 235 50951
  237 + 236 51047
  238 + 237 51243
  239 + 238 51343
  240 + 239 51447
  241 + 240 51501
  242 + 241 51897
  243 + 242 52097
  244 + 243 52301
  245 + 244 52405
  246 + 245 52617
  247 + 246 52725
  248 + 247 52837
  249 + 248 52895
  250 + 249 53123
  251 + 250 53239
  252 + 251 53359
  253 + 252 53421
  254 + 253 53549
  255 + 254 53615
  256 + 255 53685
  257 + 256 53722
  258 + 257 57046
  259 + 258 58710
  260 + 259 60378
  261 + 260 61214
  262 + 261 62890
  263 + 262 63730
  264 + 263 64574
  265 + 264 64998
  266 + 265 66690
  267 + 266 67538
  268 + 267 68390
  269 + 268 68818
  270 + 269 69678
  271 + 270 70110
  272 + 271 70546
  273 + 272 70766
  274 + 273 72490
  275 + 274 73354
  276 + 275 74222
  277 + 276 74658
  278 + 277 75534
  279 + 278 75974
  280 + 279 76418
  281 + 280 76642
  282 + 281 77534
  283 + 282 77982
  284 + 283 78434
  285 + 284 78662
  286 + 285 79122
  287 + 286 79354
  288 + 287 79590
  289 + 288 79710
  290 + 289 81498
  291 + 290 82394
  292 + 291 83294
  293 + 292 83746
  294 + 293 84654
  295 + 294 85110
  296 + 295 85570
  297 + 296 85802
  298 + 297 86726
  299 + 298 87190
  300 + 299 87658
  301 + 300 87894
  302 + 301 88370
  303 + 302 88610
  304 + 303 88854
  305 + 304 88978
  306 + 305 89934
  307 + 306 90414
  308 + 307 90898
  309 + 308 91142
  310 + 309 91634
  311 + 310 91882
  312 + 311 92134
  313 + 312 92262
  314 + 313 92770
  315 + 314 93026
  316 + 315 93286
  317 + 316 93418
  318 + 317 93686
  319 + 318 93822
  320 + 319 93962
  321 + 320 94034
  322 + 321 95950
  323 + 322 96910
  324 + 323 97874
  325 + 324 98358
  326 + 325 99330
  327 + 326 99818
  328 + 327 100310
  329 + 328 100558
  330 + 329 101546
  331 + 330 102042
  332 + 331 102542
  333 + 332 102794
  334 + 333 103302
  335 + 334 103558
  336 + 335 103818
  337 + 336 103950
  338 + 337 104970
  339 + 338 105482
  340 + 339 105998
  341 + 340 106258
  342 + 341 106782
  343 + 342 107046
  344 + 343 107314
  345 + 344 107450
  346 + 345 107990
  347 + 346 108262
  348 + 347 108538
  349 + 348 108678
  350 + 349 108962
  351 + 350 109106
  352 + 351 109254
  353 + 352 109330
  354 + 353 110414
  355 + 354 110958
  356 + 355 111506
  357 + 356 111782
  358 + 357 112338
  359 + 358 112618
  360 + 359 112902
  361 + 360 113046
  362 + 361 113618
  363 + 362 113906
  364 + 363 114198
  365 + 364 114346
  366 + 365 114646
  367 + 366 114798
  368 + 367 114954
  369 + 368 115034
  370 + 369 115638
  371 + 370 115942
  372 + 371 116250
  373 + 372 116406
  374 + 373 116722
  375 + 374 116882
  376 + 375 117046
  377 + 376 117130
  378 + 377 117462
  379 + 378 117630
  380 + 379 117802
  381 + 380 117890
  382 + 381 118070
  383 + 382 118162
  384 + 383 118258
  385 + 384 118308
  386 + 385 120480
  387 + 386 121568
  388 + 387 122660
  389 + 388 123208
  390 + 389 124308
  391 + 390 124860
  392 + 391 125416
  393 + 392 125696
  394 + 393 126812
  395 + 394 127372
  396 + 395 127936
  397 + 396 128220
  398 + 397 128792
  399 + 398 129080
  400 + 399 129372
  401 + 400 129520
  402 + 401 130668
  403 + 402 131244
  404 + 403 131824
  405 + 404 132116
  406 + 405 132704
  407 + 406 133000
  408 + 407 133300
  409 + 408 133452
  410 + 409 134056
  411 + 410 134360
  412 + 411 134668
  413 + 412 134824
  414 + 413 135140
  415 + 414 135300
  416 + 415 135464
  417 + 416 135548
  418 + 417 136760
  419 + 418 137368
  420 + 419 137980
  421 + 420 138288
  422 + 421 138908
  423 + 422 139220
  424 + 423 139536
  425 + 424 139696
  426 + 425 140332
  427 + 426 140652
  428 + 427 140976
  429 + 428 141140
  430 + 429 141472
  431 + 430 141640
  432 + 431 141812
  433 + 432 141900
  434 + 433 142568
  435 + 434 142904
  436 + 435 143244
  437 + 436 143416
  438 + 437 143764
  439 + 438 143940
  440 + 439 144120
  441 + 440 144212
  442 + 441 144576
  443 + 442 144760
  444 + 443 144948
  445 + 444 145044
  446 + 445 145240
  447 + 446 145340
  448 + 447 145444
  449 + 448 145498
  450 + 449 146838
  451 + 450 147510
  452 + 451 148186
  453 + 452 148526
  454 + 453 149210
  455 + 454 149554
  456 + 455 149902
  457 + 456 150078
  458 + 457 150778
  459 + 458 151130
  460 + 459 151486
  461 + 460 151666
  462 + 461 152030
  463 + 462 152214
  464 + 463 152402
  465 + 464 152498
  466 + 465 153230
  467 + 466 153598
  468 + 467 153970
  469 + 468 154158
  470 + 469 154538
  471 + 470 154730
  472 + 471 154926
  473 + 472 155026
  474 + 473 155422
  475 + 474 155622
  476 + 475 155826
  477 + 476 155930
  478 + 477 156142
  479 + 478 156250
  480 + 479 156362
  481 + 480 156420
  482 + 481 157216
  483 + 482 157616
  484 + 483 158020
  485 + 484 158224
  486 + 485 158636
  487 + 486 158844
  488 + 487 159056
  489 + 488 159164
  490 + 489 159592
  491 + 490 159808
  492 + 491 160028
  493 + 492 160140
  494 + 493 160368
  495 + 494 160484
  496 + 495 160604
  497 + 496 160666
  498 + 497 161126
  499 + 498 161358
  500 + 499 161594
  501 + 500 161714
  502 + 501 161958
  503 + 502 162082
  504 + 503 162210
  505 + 504 162276
  506 + 505 162536
  507 + 506 162668
  508 + 507 162804
  509 + 508 162874
  510 + 509 163018
  511 + 510 163092
  512 + 511 163170
  513 + 512 163211
  514 + 513 169863
  515 + 514 173191
  516 + 515 176523
  517 + 516 178191
  518 + 517 181531
  519 + 518 183203
  520 + 519 184879
  521 + 520 185719
  522 + 521 189075
  523 + 522 190755
  524 + 523 192439
  525 + 524 193283
  526 + 525 194975
  527 + 526 195823
  528 + 527 196675
  529 + 528 197103
  530 + 529 200491
  531 + 530 202187
  532 + 531 203887
  533 + 532 204739
  534 + 533 206447
  535 + 534 207303
  536 + 535 208163
  537 + 536 208595
  538 + 537 210319
  539 + 538 211183
  540 + 539 212051
  541 + 540 212487
  542 + 541 213363
  543 + 542 213803
  544 + 543 214247
  545 + 544 214471
  546 + 545 217923
  547 + 546 219651
  548 + 547 221383
  549 + 548 222251
  550 + 549 223991
  551 + 550 224863
  552 + 551 225739
  553 + 552 226179
  554 + 553 227935
  555 + 554 228815
  556 + 555 229699
  557 + 556 230143
  558 + 557 231035
  559 + 558 231483
  560 + 559 231935
  561 + 560 232163
  562 + 561 233951
  563 + 562 234847
  564 + 563 235747
  565 + 564 236199
  566 + 565 237107
  567 + 566 237563
  568 + 567 238023
  569 + 568 238255
  570 + 569 239179
  571 + 570 239643
  572 + 571 240111
  573 + 572 240347
  574 + 573 240823
  575 + 574 241063
  576 + 575 241307
  577 + 576 241431
  578 + 577 245011
  579 + 578 246803
  580 + 579 248599
  581 + 580 249499
  582 + 581 251303
  583 + 582 252207
  584 + 583 253115
  585 + 584 253571
  586 + 585 255391
  587 + 586 256303
  588 + 587 257219
  589 + 588 257679
  590 + 589 258603
  591 + 590 259067
  592 + 591 259535
  593 + 592 259771
  594 + 593 261623
  595 + 594 262551
  596 + 595 263483
  597 + 596 263951
  598 + 597 264891
  599 + 598 265363
  600 + 599 265839
TpSD3_Karatsuba/a.out 0 → 100755
No preview for this file type