Presupunem că avem n
numere prime notate a1, a2, ..., an
sortate strict crescător. Formăm un șir strict crescător b
ale cărui elemente sunt toţi multiplii acestor n
numere prime astfel încât, multipli comuni apar o singură dată. Presupunem că numerotarea pozițiilor elementelor din șirul b
începe tot cu 1
.
Cerința
Scrieți un program care citește din fişierul de intrare valoarea lui n
şi apoi cele n
elemente ale şirului a
, determină elementul de pe poziţia m
din şirul b
şi afişează în fişierul de ieşire valoarea acestuia.
Date de intrare
Fișierul de intrare numar6.in
conține pe prima linie două numere naturale separate printr-un spațiu care reprezintă primul valoarea lui n
și al doilea valoarea lui m
. Pe a doua linie n
numere naturale prime separate prin câte un spațiu care reprezintă valorile elementelor șirului a
. Aceste valori sunt dispuse în ordine strict crescătoare iar ultima dintre ele este mai mică decât un milion.
Date de ieșire
Fișierul de ieșire numar6.out
va conţine pe prima linie o singură valoare care reprezintă termenul de pe poziţia m
din şirul b
.
Restricții și precizări
- Pentru
30%
din testen ≤ 20
,m ≤ 1000
,a1 ≤ 50
- Pentru celelalte
70%
din teste21 ≤ n ≤ 100
,1001 ≤ m ≤ 15000
,51 ≤ a1 ≤ 1000
an < 1000000
Exemplul 1:
numar6.in
3 10 2 3 5
numar6.out
14
Explicație
Şirul b e format din valorile: 2,3,4,5,6,8,9,10,12,14,15,16,18,20,21,22
…
Pe poziţia 10
se află numărul 14
Exemplul 2:
numar6.in
4 20 7 23 37 131
numar6.out
98
Exemplul 3:
numar6.in
3 11111 977 1009 1031
numar6.out
3726237
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 numar6:
#include <bits/stdc++.h>
#define nmax 15000001
using namespace std;
int t[105], n, m;
bitset<nmax> a;
int main()
{
int i, MAX, j, x;
ifstream fin("numar6.in");
ofstream fout("numar6.out");
fin >> n >> m;
for (i = 1; i <= n; ++i)
fin >> t[i];
MAX = m * t[1];
for (i = 1; i <= n; ++i)
{
x = t[i];
for (j = t[i]; j < MAX; j += x)
a[j] = 1;
}
for (i = 1; i <= MAX && m > 0; i++)
if (a[i] == 1)
m--;
fout << (i-1) << "\n";
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 #2174 numar6
Pe această pagină găsești rezolvarea de 100 de puncte pentru problema #2174 numar6 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!