Ce este gresit la rezolvarea mea?
Am de rezolvat problema 666 de pe pbinfo si enuntul este:
Se dă o matrice cu n linii și m coloane și elemente numere naturale. Să se determine câte dintre elementele situate pe linii cu indici pari sunt prime.
Date de intrare:
4 3
5 12 10
3 9 1
7 10 1
10 9 3
Date de iesire: 2
Rezolvarea mea:
#include
using namespace std;
int main()
{
unsigned int n,m,i,j,a[100][100],cnt=0,d,ok=0;
cin>>n>>m;
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
cin>>a[i][j];
for(i=1;i<=n;i++)
{
if(i%2==0){
for(j=1;j<=m;j++)
{
for(d=2;d<=a[i][j]/2;d++)
{
if(a[i][j]%d==0)
ok=1;
}
if(ok==0)
cnt++;
}
}
}
cout<
return 0;
}
Cand rulez imi da 1. Ce e gresit?
Răspunsuri la întrebare
Răspuns:
Salut! Ai câteva greșeli în cod
1. la declarare matricea trebuie sa fie cu 101 elemente pentru că ai inceput de la 1. - a[101][101]
2. când parcurgi liniile e suficient sa începi de la 2 și să crești i cu 2. nu e obligatoriu în această problema, dar e util să știi cum să faci programul mai rapid
3.algoritmul pentru verificarea primalitatii nu pare corect
uite aici pe scurt
daca e numărul e 0 sau 1 ok primește 0, adică numărul nu este prin
daca numărul este 2 sau 3 numărul este prim, deci ok = 1
și apoi ai for ( int d = 2; d * d <= a[i][j]; d++)
daca gasesti divizor ok primește 0
( celălalta varianta e sa mergi până la radical din numar, nu până la număr / 2)
4. ok trebuie sa aibă valoarea 0 de fiecare dată când se parcurge linia.
for ...
for ...
ok = 0;
și după verifici daca e prim, etc
succes