Rezolvare completă PbInfo #2117 Divizori2

Cerința

Marinel a învăţat la şcoală despre divizibilitatea numerelor naturale. Un număr natural nenul a este divizor al numărului natural nenul b dacă restul împărţirii lui b la a este 0. De exemplu, numărul 3 este divizor al lui 12 iar numărul 4 nu este divizor al lui 15. Un număr natural nenul n este număr prim dacă are doar 2 divizori: 1 şi n. De exemplu, numărul 7 este număr prim deoarece îi are ca divizori doar pe 1 şi 7 iar numărul 21 nu este număr prim deoarece îi are ca divizori pe 1, 3, 7 şi 21. Scrieţi un program care să îl ajute pe Marinel să îşi verifice tema primită pentru acasă.

Fiind date numărul n al numerelor din şir şi numerele din şir, să se determine:
1) divizorii celui mai mare număr din şir, inclusiv 1 şi el însuşi;
2) numerele prime din şir;
3) numerele care sunt divizori ai tuturor numerelor din şir.

Date de intrare

Fişierul de intrare divizori2.in conține pe prima linie un număr natural P, pe a doua linie un număr natural n reprezentând numărul de numere din şir şi pe a treia linie cele n numere naturale din şir, separate prin spaţii.

Date de ieșire

Dacă valoarea lui P este 1, se va rezolva numai punctul 1) din cerinţă: fişierul divizori2.out va conţine pe prima linie doar divizorii celui mai mare număr din şir.
Dacă valoarea lui P este 2, se va rezolva doar punctul 2) din cerinţă:
fişierul divizori2.out va conţine pe prima linie doar numerele prime din şir sau numărul -1 dacă şirul nu conţine numere prime.
Dacă valoarea lui P este 3, se va rezolva numai punctul 3) din cerinţă:
fişierul divizori2.out va conţine pe prima linie doar numerele care sunt divizori ai tuturor numerelor din şir.

Restricții și precizări

  • valoarea lui P poate să fie doar 1 sau 2 sau 3;
  • numărul natural n este cuprins între 2 şi 1000;
  • numerele din şir sunt numere naturale nenule cu cel mult 6 cifre;
  • pentru rezolvarea corectă a primei cerinţe se acordă 30 de puncte;
  • pentru rezolvarea corectă a celei de-a doua cerinţe se acordă 30 de puncte;
  • pentru rezolvarea corectă a celei de-a treia cerinţe se acordă 40 de puncte;

Exemplu1:

divizori2.in

1
7
12 18 8 4 13 6 17

divizori2.out

1 2 3 6 9 18

Explicație

P=1 deci se rezolvă prima cerinţă.
Cel mai mare număr din şir este 18.
Divizorii numărului 18 sunt 1, 2, 3, 6, 9 şi 18.

Exemplu2:

divizori2.in

2
7
12 18 8 4 13 6 17

divizori2.out

13 17

Explicație

P=2 deci se rezolvă a doua cerinţă.
Numerele prime din şir sunt 13 şi 17.

Exemplu3:

divizori2.in

2
7
12 18 8 4 12 6 15

divizori2.out

-1

Explicație

P=2 deci se rezolvă a doua cerinţă.
Nu sunt numere prime în şir.

Exemplu4:

divizori2.in

3
4
70 42 21 35

divizori2.out

1 7

Explicație

P=3 deci se rezolvă a treia cerinţă.
Divizorii lui 70 sunt 1, 2, 5, 7, 10, 14, 35 şi 70.
Divizorii lui 42 sunt 1, 2, 3, 6, 7, 14, 21 şi 42.
Divizorii lui 21 sunt 1, 3, 7 şi 21.
Divizorii lui 35 sunt 1, 5, 7 şi 35.
Numerele care sunt divizori ai tuturor numerelor din şir sunt 1 şi 7.

Cum e corect?

cout < "As la info"; cout << "As la info"; cout >> "As la info";

Felicitări! Poți mai mult?

Avem sute de probleme pentru tine, fiecare cu explicații ușor de înțeles.

Greșit, dar nu-i bai!

Antrenează-te cu sutele de probleme pe care ți le-am pregătit. Îți explicăm fiecare problemă în parte.

Rezolvare

Iată rezolvarea de 100 de puncte pentru problema Divizori2:

#include <iostream>
#include <fstream>
using namespace std;
int main()
{
    ifstream fin("divizori2.in");
    ofstream fout("divizori2.out");
    int P,n,i,x,maxim,prim,nrdiv,d,a[1001],minim,nr,j;
    fin>>P;
    if(P==1)
    {
        fin>>n;
        maxim=0;
        for(i=1;i<=n;i++)
        {
            fin>>x;
            if(x>maxim)
                maxim=x;
        }
        for(i=1;i<=maxim;i++)
            if(maxim%i==0)
                fout<<i<<' ';
    }
    if(P==2)
    {
        fin>>n;
        prim=0;
        for(i=1;i<=n;i++)
        {
            fin>>x;
            nrdiv=0;
            for(d=1;d<=x;d++)
                if(x%d==0)
                    nrdiv++;
            if(nrdiv==2)
            {
                fout<<x<<' ';
                prim=1;
            }
        }
        if(prim==0)
            fout<<-1;
    }
    if(P==3)
    {
        fin>>n;
        for(i=1;i<=n;i++)
            fin>>a[i];
        minim=a[1];
        for(i=1;i<=n;i++)
            if(a[i]<minim)
                minim=a[i];
        for(i=1;i<=minim;i++)
        {
            nr=0;
            for(j=1;j<=n;j++)
                if(a[j]%i==0)
                    nr++;
            if(nr==n)
                fout<<i<<' ';
        }
    }
    fin.close();
    fout.close();
    return 0;
}

Atenție

Enunțurile afișate pe această pagină aparțin exclusiv site-ului PbInfo. Astfel, pentru ștergerea conținutului, puteți să ne contactați la adresa Adresa de email.

Rezolvarea problemei #2117 Divizori2

Pe această pagină găsești rezolvarea de 100 de puncte pentru problema #2117 Divizori2 de pe PbInfo.ro. Atenție: nu încurajăm copiatul codului! Totuși, credem cu tărie că analizarea unei soluții corecte este o metodă foarte ușoară de a învăța informatică, astfel că oferim sursele pentru peste 1500 de probleme de pe platforma PbInfo.ro.

Pentru rezolvări PbInfo de la peste 1500 de probleme, vă invităm să intrați pe site-ul nostru!