Răspuns :
Răspuns:
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin ("eratostene3.in");
ofstream fout ("eratostene3.out");
int main()
{
int n, x, y, C, cx;
fin >> n;
for (int i = 1; i <= n; i++)
{
fin >> x;
C = 0;
for (int j = 1; j <= x; j++)
{
y = j;
cx = x;
while (y != cx)
{
if (cx>y)
cx = cx - y;
else y = y - cx;
}
if (y == 1)
C++;
}
fout << C;
}
fin.close();
fout.close();
return 0;
}
Explicație:
Dupa fiecare numar citit in variabila x, contorul C (care contorizeaza cate numere mai mici sau egale cu x sunt prime cu acesta) este 0. Parcurgem toate numerele mai mici sau egale cu x (adica de la 1 la x) cu variabila j, dar pentru a nu pierde valorile memorate in variabilele x si j, le memoram in alte variabile, si anume cx si y. Astfel, cx memoreaza valoarea lui x, iar y memoreaza valoarea lui j. Structura "while" care urmeaza dupa asta calculeaza cmmdc al celor 2 numere, iar dupa ce iesim din "while", y si cx o sa fie egale, ambele memorand cmmdc al numerelor x si j, care ne intereseaza. Daca y (sau cx) este 1, inseamna ca numerele sunt prime intre ele, deci prin urmare, contorul (adica C) se mareste cu 1. Repetam aceeasi procedura pentru celelalte numere din intervalul [1;x], iar la final il afisam pe C. Dupa asta, citim inca un numar x si procedam la fel ca pana acum.
Daca ai nelamuriri, nu ezita sa mi le comunici. :)
Vă mulțumim pentru vizita pe site-ul nostru dedicat Informatică. Sperăm că informațiile prezentate v-au fost utile. Dacă aveți întrebări sau aveți nevoie de suport suplimentar, nu ezitați să ne contactați. Ne bucurăm să vă revedem și vă invităm să ne adăugați în lista de favorite!