Salut. Se da exercitiul din poza.
As dori o explicatie exacta a secventei incadrata in chenarul rosu cu raspunsul aferent problemei.
Multumesc anticipat!
Răspunsuri la întrebare
Răspuns:
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
int n, d, q, f;
cin >> n;
d=2; q=(int)sqrt(n);
f=1;
while ((d<=q)&&f)
{
f=f&&(n%d); d=d+1;
cout << f << " " << d << "\n";
}
}
Explicație:
Salut! Ca să pricep şi eu ce se întâmplă am creat codul de mai sus şi pentru a înţelege mai bine am adăugat nişte paranteze să se înţeleagă mai bine prioritatea operaţiilor. Răspunsul e că funcţia determină dacă numărul trimis în funcţie e prim sau nu.
Cred prima ce trebuie explicată este
while ((d<=q)&&f)
vezi am adăugat paranteze, deoarece prima operaţie se face &&, care este operaţie logică cu rezultat 0 (pentru false) şi 1 (pentru true).
d este priceput ca divizor şi valoarea din start este 2, iar q este radacina pătrată din n. Fie n=15, adunci d<=q este adevarat, adică 1, şi f=1, deci condiţia lui while este adevărată, se intră în while.
Am ajuns la instrucţiunea pe care ai conturat+o în roşu
f=f&&(n%d);
Aici avem un ŞI logic dintre f şi restul n%d
f era 1, iar dacă restul este 0 (adică d îl divide pe n, ce demonstrează că n nu e prim dacă s-a găsit un divizor până la rădăcina pătrată din el ) atunci rezultatul acestei operaţii va fi 0, care va fi primit de f, şi pentru care condiţia lui while va fi falsă şi evident return f; va întoarce 0, adică n nu e prim
Sper că am fost explicit... Paşte fericit!