Rezolvare completă PbInfo #1394 devt

Enunț

Într-o zi, Gigel a găsit pe masa tatălui său o foaie A4 pe care era trecut șirul denumit “devt” sub forma 1, 4, 6, 8, 9, 10, 12, 14, 15, 16, 18, 20, 21, 22, 24, 25, ... , n. Dedesubtul acestui șir găsește un text alcătuit din k întrebări de forma a, b cu semnificația “Câte numere din acest șir se află în intervalul [a,b]?”.

Cerința

Ajutați-l pe Gigel să răspundă corect la toate cele k întrebări.

Date de intrare

Fișierul de intrare devt.in conține pe prima linie numerele naturale n și k, iar pe următoarele k linii numerele a, b cu semnificația din enunț.

Date de ieșire

Fișierul de ieșire devt.out va conține k linii, pe fiecare linie i aflându-se un număr natural, reprezentând răspunsul întrebării i.

Restricții și precizări

  • 0 ≤ a ≤ b ≤ n ≤ 100000
  • 1 ≤ k ≤ 5000
  • n aparține șirului devt

Exemplu

devt.in

25 5
3 7
12 20
3 4
16 24
12 24

devt.out

2
6
1
6
9

Explicație

În intervalul [3,7] se află 2 numere din șir.
În intervalul [12,20] se află 6 numere din șir.
În intervalul [3,4] se află 1 număr din șir.
În intervalul [16,24] se află 6 numere din șir.
În intervalul [12,24] se află 9 numere din șir.

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

#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("devt.in");
ofstream fout("devt.out");
typedef int vect[100001];
vect sol,a;
int long long n,k,i,j,z;
int main()
{
    fin>>n>>k;
    a[1]=1;
    for(i=2;i<=n;i++)
        if(a[i]!=1)for(j=i*i;j<=n;j+=i)a[j]=1;
    for(i=1;i<=n;i++)
    {
        sol[i]=sol[i-1];
        if(a[i]==1)sol[i]++;
    }
    for(z=1;z<=k;z++)
    {
        fin>>i>>j;
        if(a[i]==1)fout<<sol[j]-sol[i]+1<<"\n";
        else fout<<sol[j]-sol[i]<<"\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 Adresa de email.

Rezolvarea problemei #1394 devt

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