50/100 Matrice prima

Ciao ragazzi,
ho un problema, il mio codice fa 50/100
il subtask 3 mi da Execution killed with signal 11 (could be triggered by violating memory limits)
Qualcuno potrebbe dirmi dove sbaglio?

#include <bits/stdc++.h>

using namespace std;

bool primi[10000];
int matrice[510][510];
int N = 10000;
int main()
{
    for(int i = 2; i < N ; i++) primi[i] = 1;  //crivello di eratostene
    for(int i = 2 ; i < N ; i++)
        if(primi[i])
            for(int j = i; j*i < N; j++) primi[i*j] = 0;
    int m,n;
    primi[1] = 0;

    cin >> n >> m;

    for(int i = 0 ; i < n ; i++)
        for(int j = 0 ; j < m; j++)
            cin >> matrice[i][j];

    int migliore = 1000000;

    for(int i = 0 ; i< n ; i++)  //controllo le righe
    {
        int conta = 0;
        for(int j = 0 ; j < m ; j++)
        {
            if(primi[matrice[i][j]] != 1)
            {
                int temp;
                int k = matrice[i][j];
                while(primi[k] != 1)
                    k++;
                temp = k;
                conta+= abs(matrice[i][j] - temp);
            }
        }
        migliore = min(migliore, conta);
    }
    
    for(int j = 0 ; j< m ; j++)  //controllo le colonne
    {
        int conta = 0;
        for(int i = 0 ; i < n ; i++)
        {
            if(primi[matrice[i][j]] != 1)
            {
                int temp;
                int k = matrice[i][j];
                while(primi[k] != 1)
                    k++;
                temp = k;
                conta+= abs(matrice[i][j] - temp);
            }
        }
        migliore = min(migliore, conta);
    }

    cout << migliore;

    return 0;
}

Ogni elemento della matrice può arrivare fino a 100000, mentre il tuo controllo sui primi si ferma a 10000 e quindi nell’ultimo subtask accedi a memoria non allocata.
Dario

1 Mi Piace

Il problema e’ che quando metto al posto di 10000 100000 mi da’ 0/100 e tutti i subtask Execution killed with signal 11 (could be triggered by violating memory limits)

Presta attenzione a quando accedi alla posizione i*j all’interno dell’array di primi… aumenta le dimensioni di quell’array e forse risolvi il problema. :slight_smile:
Rebecca

Devi aggiornare a 100000 sia N che la dimensione dell’array primi
Dario

1 Mi Piace

Ma si, anche quello.
Comunque ho risolto.

deve andare invece fino a sqrt(N)