Rezolvare completă PbInfo #1596 Divizori1

Fie X un vector de numere naturale distincte, de dimensiune N, X = (x[1], x[2], …, x[N]). Se dă un număr natural Q, apoi Q întrebări de forma: “Câţi divizori ai lui Qi se află în şirul X?”.

Cerința

Răspundeţi la cele Q întrebări.

Date de intrare

Fișierul de intrare divizori1.in conține:

  • Pe prima linie 2 numere N și Q, reprezentând dimensiunea lui X şi numărul de întrebări;
  • Pe a doua linie se găsesc N numere separate prin spaţiu, reprezentând elementele vectorului X.
  • Pe următoarele Q linii se găsesc cele Q întrebări, reprezentate printr-un număr Qi pe fiecare linie.

Date de ieșire

Fișierul de ieșire divizori1.out va conține:

  • Q linii, fiecare linie i, reprezentând răspunsul pentru Qi.

Restricții și precizări

  • 1 ≤ N, Q ≤ 10.000
  • 1 ≤ Qi, Xi ≤ 100.000

Exemplu

divizori1.in

5 2
6 2 3 12 4
6
12

divizori1.out

3
5

Explicație

6 conţine 3 divizori în şir(6, 2, 3).
12 conţine 5 divizori în şir(6, 2, 3, 12, 4).

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 Divizori1:

//Dragan Andrei Gabriel
//University of Bucharest

#include <cstdio>
using namespace std;

int v[100001], N, X, Q, nr;

int main()
{
    freopen("divizori1.in", "r", stdin);
    freopen("divizori1.out", "w", stdout);

    scanf("%d %d", &N, &Q);

    for (int i = 1; i <= N; i++)
        {
            scanf("%d", &X);
            for (int j = X; j <= 100000; j += X)
                v[j]++;
        }

    for (int i = 1; i <= Q; i++)
    {
        scanf("%d", &X);
        printf("%d\n", v[X]);

    }
    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 #1596 Divizori1

Pe această pagină găsești rezolvarea de 100 de puncte pentru problema #1596 Divizori1 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!