Problema Pacchetti corrotti

Salve ragazzi sto cercando di risolvere il suddetto esercizio da qualche ora ma senza avere un esito favorevole. Vi allego il codice che ho sviluppato che però purtroppo non funziona.

#include <stdlib.h>
int P, M;
int p[10];
//(int *)malloc(1000*sizeof(int));

int mcd(int a, int b){
    int r;
    while(b){
         r = a%b;
         a=b; 
         b=r;
    }
    return a;
}

void inizializza(int current_P, int current_M) {
    // Salviamo P e M in due variabili globali.
    P = current_P;
    M = current_M;
}

int controlla(int checksum) {
    static int in=0;
    p[in++]=checksum; //non funziona
    for(int i=0; i<in; i++){
        printf("p[in]: %d\n", p[in]);
        printf("in: %d\n", in);
        if(mcd(p[in],checksum)!=1){
                return p[in];
        }
    }
    return 0;
}

Ho pensato di salvare i vari checksum che vengono passati alla funzione in un array globale e di utilizzare una variabile statica per memorizzare la lunghezza occupata dell’array. Il problema è che l’array che uso per salvare i checksum, cioè p, rimane sempre vuoto cioè tutti i valori risultano essere uguali a 0. Qui in basso vi allego l’output in relazione ad un esempio di input.

4 10

3 2 6 4
p[in]: 0
in: 1
p[in]: 0
in: 2
p[in]: 0
in: 3
p[in]: 0
in: 4
0 0 0 0

Grazie per eventuali consigli su come risolvere il problema.

Non ho ben capito come funziona il tuo codice, se vuoi qua puoi trovare una versione funzionante simile alla tua.
Comunque il tuo algoritmo ha complessità O(P^2) (se ti interessa puoi approfondire qua) che è troppo elevata e ti darà al massimo 55 punti.
Quindi ti consiglio di cercare una strategia diversa, oppure puoi guardare il booklet con le soluzioni ufficiali.

In aggiunta alle risorse che ti ha segnalato @bortoz, l’errore è nel frammento di codice che ho riportato qua sopra. Nel ciclo accedi sempre alla posizione in (che indica invece il primo posto libero nel vettore), mentre dovresti accedere a tutte le posizioni i (con i < in).