Cod sursa(job #657763)

Utilizator valentin.harsanValentin Harsan valentin.harsan Data 7 ianuarie 2012 13:15:37
Problema Potrivirea sirurilor Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.91 kb
#include<fstream>
#include<iostream>
#include<bitset>
using namespace std;

ifstream in("nasa.in");
ofstream out("nasa.out");

int a,b,nrr,nr[10000],nrp;
bitset<100000010> bb;
bitset<100000> c;

void ciur() {
    int i,j;

    for(i=2;i*i<=b;++i) {
        if(!c[i]) {
            nr[++nrp]=i*i;

            for(j=i*i;((long long)j*j)<=b;j+=i) {
                c[j]=true;
            }
        }
    }
}

int main() {
    int i,j,tm,pas;
    unsigned int jj;

    in >> a >> b;

    ciur();

    for(i=1;i<=nrp;++i) {
        pas=1<<30; tm=0;

        if(nr[i]<a)
            for(tm=0;pas!=0;pas>>=1)
                if((long long)(tm+pas)*nr[i]<a)
                    tm+=pas;

        for(jj=(unsigned int)nr[i]*(tm+1);jj<=b;jj+=nr[i])
            bb[jj-a]=true;
    }

    for(i=0;i<=b-a;++i)
        if(!bb[i])
            ++nrr;

    out << nrr << "\n";

    return 0;
}