👤

Se dă o matrice cu n linii și m coloane nr. naturale. Se cere :
a) câte elemente prime sunt pe conturul matricii.
b) afișați elementele din matrice care sunt precedate de un număr prim​


Răspuns :

#include <iostream>

using namespace std;

int i, j, a[102][102], n, m, prim, nr, d;

int main()

{

 cin>>n>>m;

 for(i=1; i<=n; i++)

   for(j=1; j<=m; j++)

     cin>>a[i][j];

 for(j=1; j<=m; j++)

   {

     if(a[1][j]==1 or a[1][j]==0)

        prim=0;

     else prim=1;

     for(d=2; d*d<=a[1][j]; d++)

       if(a[1][j]%d==0)

         prim=0;

     if(prim==1)

       nr++;

   }

  for(j=1; j<=m; j++)

   {

     if(a[n][j]==1 or a[n][j]==0)

        prim=0;

     else prim=1;

     for(d=2; d*d<=a[n][j]; d++)

       if(a[n][j]%d==0)

         prim=0;

     if(prim==1)

       nr++;

   }

  for(i=2; i<n; i++)

   {

     if(a[i][1]==1 or a[i][1]==0)

        prim=0;

     else prim=1;

     for(d=2; d*d<=a[i][1]; d++)

       if(a[i][1]%d==0)

         prim=0;

     if(prim==1)

       nr++;

   }

 for(i=n-1; i>=2; i--)

   {

     if(a[i][n]==1 or a[i][n]==0)

        prim=0;

     else prim=1;

     for(d=2; d*d<=a[i][n]; d++)

       if(a[i][n]%d==0)

         prim=0;

     if(prim==1)

       nr++;

   }

 cout<<nr<<endl;

 for(i=1; i<=n; i++)

   for(j=2; j<=m; j++)

     {

       if(a[i][j-1]==1 or a[i][j-1]==0)

       prim=0;

       else prim=1;

       for(d=2; d*d<=a[i][j-1]; d++)

         if(a[i][j-1]%d==0)

           prim=0;

       if(prim==1)

         cout<<a[i][j]<<' ';

     }

   return 0;

}

Algoritmul este testat, dar nu stiu sigur daca este valabil in toate cazurile.   Sunt multe instructiuni si risc de a gresi. Banuiesc ca poate fi facut intr-o forma mai simpla, dar am ales sa-l scriu pe bucati ca sa fiu mai sigura. Sper ca te-am ajutat si ca programul functioneaza corect.