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 .
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!