Cerința
Se dau două șiruri de câte N
numere naturale fiecare. Se cere să se găsească valoarea maximă a celui mai mare divizor comun a două numere A
și B
, astfel încât A
să aparțină primului șir, iar B
să aparțină celui de-al doilea șir.
Date de intrare
În fișierul gcd.in
se va afla pe prima linie un număr reprezentând valoarea lui N
. Pe cea de-a doua linie se vor afla N
numere separate prin câte un spațiu, reprezentând elementele primului șir. Pe cea de-a treia linie se vor afla N
numere separate prin câte un spațiu, reprezentând elementele celui de-al doilea șir.
Date de ieșire
În fișierul gcd.out
se va afla pe primia linie un număr natural reprezentând valoarea maximă a celui mai mare divizor comun a două numere A
și B
, astfel încât A
să aparțină primului șir, iar B
să aparțină celui de-al doilea șir.
Restricții și precizări
N ≤ 500.000
- Elementele celor două șiruri sunt mai mici sau egale cu
1.000.000
- Pentru 40% din teste,
N ≤ 1.000
Exemplu
gcd.in
5 3 1 4 2 8 5 2 12 8 3
gcd.out
8
Explicație
A
= 8
, B
= 8
, iar (A,B)
= 8
este valoarea maximă a celui mai mare divizor comun a vreunei perechi.
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 gcd:
#include <fstream>
#define NM 1000001
using namespace std;
ifstream fin("gcd.in");
ofstream fout("gcd.out");
int n,a,b,A[NM],B[NM],vm,val,ok,ok1,j,i,ii;
int main()
{
fin>>n;
for(int i=1;i<=n;i++)
{
fin>>a,A[a]=1;
if(a>vm) vm=a;
}
val=1;
for(int i=1;i<=n;i++)
{
fin>>b,B[b]=1;
if(b>vm) vm=b;
if(B[b]&&A[b]&&b>val)
val=b;
}
for(int i=2;i<=vm;i++)
{
ok=0;ok1=0;
for(j=i;j<=vm&&(ok==0||ok1==0);j+=i)
{
if(B[j]==1)
{
ok=1;
}
if(A[j]==1)
{
ok1=1;
}
}
if(ok&&ok1&&i>val)
val=i;
}
fout<<val<<'\n';
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 #2296 gcd
Pe această pagină găsești rezolvarea de 100 de puncte pentru problema #2296 gcd 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!