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

Un numar poate fi : prim,patrat prim(sqrt = prim),aproape prim (produsul a 2 numere prime distincte),compuse (celelalte cazuri).Se da un numar.Sa se verifice ce fel de numar e. Am facut ce am facut dar nu merge.Cineva sa imi spuna ce si unde am gresit,precizand cum e corect.

Anexe:

Răspunsuri la întrebare

Răspuns de blindseeker90
0
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;
}

Alte întrebări interesante