Informatică, întrebare adresată de elenadiana65ostf5x, 9 ani în urmă

Se citeste de la tastatura un numar natural n si cele n linii si n coloane ale unei matrici.
Sa se calculeze suma elementelor prime de deasupra diagonalei principale.

ex :
n=3
1 4 7
8 6 2
9 3 5
S=9

Răspunsuri la întrebare

Răspuns de Razzvy
1
#include <iostream>
#include <cmath>
using namespace std;

bool prim(int x)
{
    if(x % 2 == 0 && x > 2 || x < 2) return false;
 
    int sq = sqrt(x);
    for(int i = 3; i <= sq; i += 2)
       if(x % i == 0) return false;
 
    return true;
}

int main()
{
   int a[100][100], n, s = 0;
 
   cin>>n;
   for(int i = 0; i < n; i++)
       for(int j = 0; j < n; j++)
           cin>>a[i][j];

   for(int i = 0; i < n; i++)
      for(int j = i + 1; j < n; j++)
      {
           if(prim(a[i][j])) s += a[i][j];
      }
   cout<<s;
}

Razzvy: Nu voiai cu functie?
Razzvy: Sau voiai in alt limbaj?
stassahul: Pai e correct, daca deja ceva anumit dorea trebuia sa precizeze
stassahul: Totusi puteai si fara cmath, exista accelasi algoritm pentru numere prime, doar ca fara sqrt:
stassahul: for(i = 3; i*i <= a && a % i; i += 2);
return i*i > a;
Razzvy: Stiu asta, dar este cu putin mai rapid(neseminificativ) sa faci o singura data un radical, decat de mai multe ori o inmultire.
Alte întrebări interesante