diff --git a/Makefile b/Makefile
index 50868ee053224e3f5a8f909f56e98beca4c09df1..e79082fddcced135bb5e7a2a7004a2a94a551de4 100644
--- a/Makefile
+++ b/Makefile
@@ -19,4 +19,10 @@ mrproper: clean
 	rm -rf run
 
 prog : run
-		./run
\ No newline at end of file
+		./run
+
+val : run
+		valgrind ./run
+
+cpp : run.c
+		cppcheck run.c
\ No newline at end of file
diff --git a/README.md b/README.md
index f92c83c96540130c742e5e39e74515e7924c8f50..5395b1b88ad99889fdde221c161efde2ca4645bd 100644
--- a/README.md
+++ b/README.md
@@ -1,3 +1,7 @@
 # lepl1503-2020-groupe-M2
 
 Pour compiler et exécuter (tester) le programme : make prog mrproper
+
+Pour compiler et effectuer une analyse avec "Valgrind" : make val mrproper
+
+Pour compiler et effctuer une analyse avec "cppcheck" : make cpp 
diff --git a/expected_output.txt b/expected_output.txt
index 4da4b67f399ced41f448ac9e547897f633418e27..f87b24f4501806131f532c3a56cdfc5cf2d02924 100644
--- a/expected_output.txt
+++ b/expected_output.txt
@@ -1,3 +1,6 @@
-14 2 7
+14 7 2
 13
-100 2 5
+100 5 2
+1225 7 5
+5946 991 3 2
+198354 2543 13 3 2
diff --git a/input.txt b/input.txt
index d2ffa8644ea795a2b9a0f1c9363a2e97e52e183c..89bd67736f59fc9a3509322ac38ba92fe3c54285 100644
--- a/input.txt
+++ b/input.txt
@@ -1,3 +1,6 @@
 14
 13
 100
+1225
+5946
+198354
diff --git a/run.c b/run.c
index 0f3f34b4a3bf615fd871519c2818f64fd3afebce..7094303587d9d887dcd7def737396c3027abc7aa 100644
--- a/run.c
+++ b/run.c
@@ -10,12 +10,12 @@
 #include <string.h>
 
 
-int is_div(int number, int i) { // Vérifie si i est un diviseur de number.
+int is_div(long number, long i) { // Vérifie si i est un diviseur de number.
     return (number % i == 0) ; // revoi 0 si le nombre n'est pas divisible par i et 1 si il est divisible
 }
 
-int is_prime(int number) { // Vérifie si number est un nombre premier. Return 1 si il est premier, 0 sinon
-    for (int i = 2 ; i < number ; i++) { //regarde les differents nombres pouvant etre diviser number
+int is_prime(long number) { // Vérifie si number est un nombre premier. Return 1 si il est premier, 0 sinon
+    for (long i = 2 ; i <= (number/2); i++) { //regarde les differents nombres pouvant etre diviser number
         if (is_div(number,i) != 0) { // si i peut diviser number
             return 0 ; //renvoi 0 => FAUX
         }
@@ -24,7 +24,7 @@ int is_prime(int number) { // Vérifie si number est un nombre premier. Return 1
 }
 
 typedef struct node{
-    int value;
+    long value;
     struct node *next;
 }node_t;
 
@@ -33,7 +33,7 @@ typedef struct queue{
     int size;
 }queue_t;
 
-queue_t* enqueue(queue_t* q, int val){
+queue_t* enqueue(queue_t* q, long val){
 
     struct node new_node;
     new_node.value = val;
@@ -59,7 +59,7 @@ queue_t* enqueue(queue_t* q, int val){
 }
 
 
-queue_t* prime_divs(int number){
+queue_t* prime_divs(long number){
 
     struct queue new_queue;
     new_queue.size = 0;
@@ -71,17 +71,17 @@ queue_t* prime_divs(int number){
     if (ptr == NULL){return NULL;}
     *ptr = new_queue;
 
-   for (int i = 2; i < number; i++){
+    for (long i = 2; i < number; i++){
         if (is_prime(i) == 1 && is_div(number, i)){
             ptr = enqueue(ptr,i);
             if (ptr == NULL){return NULL;}
 
         }
-   }
-   //ptr = enqueue(ptr,-1);
-   //if (ptr == NULL){return NULL;}
+    }
+    //ptr = enqueue(ptr,-1);
+    //if (ptr == NULL){return NULL;}
 
-   return ptr;
+    return ptr;
 
 }
 
@@ -107,7 +107,8 @@ int run (char *input,char *output){
         struct queue *pr_divs;
         pr_divs = malloc(sizeof(queue_t));
         if (pr_divs == NULL){return -1;}
-        pr_divs = prime_divs(atoi(chaine));
+        char *c;
+        pr_divs = prime_divs(strtol(chaine,&c,10));
 
         char *ptr;
         ptr = malloc(50);
@@ -115,11 +116,13 @@ int run (char *input,char *output){
         *ptr = '\0';
         struct node *current;
         current = malloc(sizeof(node_t));
+        if (current == NULL){return -1;}
         *current = *pr_divs->tail;
+        current = current->next;
         fprintf(file2,"%s",chaine);
         for (int i = 0; i < pr_divs->size; i++)
         {
-            fprintf(file2," %d",current->value);
+            fprintf(file2," %ld",current->value);
             current = current->next;
         }
         fputc('\n',file2);
@@ -133,9 +136,9 @@ int run (char *input,char *output){
 
 }
 
-/* int main(){
-    int err = run("input.txt","actual_output.txt");
+ /* int main() {
+     int err = run("input.txt", "actual_output.txt");
 
-    return err;
-} */
+     return err;
+ } */
 
diff --git a/run.h b/run.h
index f3159ba04c2aafdc33e186f590acb8511d6b3caa..090f7541df3a9a6844e23d63dc9da924854860fe 100644
--- a/run.h
+++ b/run.h
@@ -1,18 +1,18 @@
 #ifndef RUN
 #define RUN
 
-int is_div(int number, int i);
-int is_prime(int number);
+int is_div(long number, long i);
+int is_prime(long number);
 typedef struct node{
-    int value;
+    long value;
     struct node *next;
 }node_t;
 typedef struct queue{
     struct node *tail;
     int size;
 }queue_t;
-int enqueue(queue_t* q, int val);
-queue_t* prime_divs(int number);
+int enqueue(queue_t* q, long val);
+queue_t* prime_divs(long number);
 
 int run (char *input,char *output);
 
diff --git a/test.c b/test.c
index c3840f30166e72f30e2e69dbbafac4e58f9193e6..bdef2584b6c6f8bbc5e5036e663e2e8de81ccfcb 100644
--- a/test.c
+++ b/test.c
@@ -44,8 +44,8 @@ void file_test(void){
 
     while (fgets(chaine1,50,file1) != NULL && fgets(chaine2,50,file2) != NULL)
     {
-        printf("%d\n",chaine1[2]);
-        printf("%d\n",chaine2[2]);
+        /* printf("%d\n",chaine1[2]);
+        printf("%d\n",chaine2[2]); */
         CU_ASSERT_STRING_EQUAL(chaine1,chaine2);
     }