Răspuns :
Salut,
Valoarea variabilei prim functioneaza invers fata de cum ai folosit-o tu, si anume: daca prim devine 0(nr de imparte exact la un divizor) inseamna ca nr NU este prim. Deci, pentru prim=1 este prim, pentru prim=0 inseamna ca nu este prim si trebuia sa faci verificarile mai departe.
Pe acelasi principiu e si la patrat prim, deci daca ramane prim=0 inseamna ca e patrat prim, altfel continua mai departe pentru prim=2
Cred ca se poate face mai usor pentru verificare ca este aproape prim. Incepi sa imparti numarul la toti divizorii sai. Daca obtii o impartire exacta, divizorul descoperit este sigur un nr prim(numeri de la cel mai mic divizor si evident divizorii primi sunt mai mici decat cei compusi)
Atunci imparti nr tau la acel divizor, obtii celalalt divizor si verifici daca este prim sau nu. Daca este prim, atunci din nou prim=2, daca in schimb se imparte exact, nu este prim si atunci devine 3
//Sa se verifica daca n este numar prim,compus,patrat prim,aproapre prim.
#include<iostream>
#include<cmath>
using namespace std;
int main()
{
int n, prim=1, i, d, a, x = i, k, y = k;
cout<<"Introduceti nr:";
cin>>n;
for (i=2 ; i<=sqrt(n) ; i++)
{
if (n % i == 0)
prim=0;
}
if (prim==0)
{
d=sqrt(n);
for (i = 2 ; i<=sqrt (d) ; i++)
if (d % i == 0)
prim = 2;
}
if (prim == 2)
{
for (i = 2 ; i<=sqrt (n) ; i++)
{
if (n % i == 0)
{
x = i;
y=n/x;
for (k=2 ; k<=sqrt(y) ; k++)
{
if (y % k == 0)
prim=3;
}
break;
}
}
}
if (prim == 0)
cout<<n<<" este numar patrat prim";
if (prim == 1)
cout<<n<<" este numar prim";
if (prim == 2)
cout<<n<<" este aproape prim";
if (prim == 3)
cout<<n<<" este compus";
return 0;
}
Valoarea variabilei prim functioneaza invers fata de cum ai folosit-o tu, si anume: daca prim devine 0(nr de imparte exact la un divizor) inseamna ca nr NU este prim. Deci, pentru prim=1 este prim, pentru prim=0 inseamna ca nu este prim si trebuia sa faci verificarile mai departe.
Pe acelasi principiu e si la patrat prim, deci daca ramane prim=0 inseamna ca e patrat prim, altfel continua mai departe pentru prim=2
Cred ca se poate face mai usor pentru verificare ca este aproape prim. Incepi sa imparti numarul la toti divizorii sai. Daca obtii o impartire exacta, divizorul descoperit este sigur un nr prim(numeri de la cel mai mic divizor si evident divizorii primi sunt mai mici decat cei compusi)
Atunci imparti nr tau la acel divizor, obtii celalalt divizor si verifici daca este prim sau nu. Daca este prim, atunci din nou prim=2, daca in schimb se imparte exact, nu este prim si atunci devine 3
//Sa se verifica daca n este numar prim,compus,patrat prim,aproapre prim.
#include<iostream>
#include<cmath>
using namespace std;
int main()
{
int n, prim=1, i, d, a, x = i, k, y = k;
cout<<"Introduceti nr:";
cin>>n;
for (i=2 ; i<=sqrt(n) ; i++)
{
if (n % i == 0)
prim=0;
}
if (prim==0)
{
d=sqrt(n);
for (i = 2 ; i<=sqrt (d) ; i++)
if (d % i == 0)
prim = 2;
}
if (prim == 2)
{
for (i = 2 ; i<=sqrt (n) ; i++)
{
if (n % i == 0)
{
x = i;
y=n/x;
for (k=2 ; k<=sqrt(y) ; k++)
{
if (y % k == 0)
prim=3;
}
break;
}
}
}
if (prim == 0)
cout<<n<<" este numar patrat prim";
if (prim == 1)
cout<<n<<" este numar prim";
if (prim == 2)
cout<<n<<" este aproape prim";
if (prim == 3)
cout<<n<<" este compus";
return 0;
}
Vă mulțumim că ați vizitat platforma noastră dedicată Informatică. Sperăm că informațiile oferite v-au fost utile. Dacă aveți întrebări sau aveți nevoie de asistență suplimentară, nu ezitați să ne contactați. Așteptăm cu nerăbdare să vă revedem și nu uitați să ne salvați în lista de favorite!