Cod sursa(job #597302)

Utilizator mihai995mihai995 mihai995 Data 21 iunie 2011 18:42:46
Problema Principiul includerii si excluderii Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 0.99 kb
#include <fstream>
using namespace std;

const int N=1099999,M=16;
long long d[M],prim[N],a,b,rez;
bool c[N];

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

void ciur()
{
    c[0]=c[1]=true;
    for (int i=2;i*i<N;i++)
        if (!c[i])
        {
            prim[++prim[0]]=i;
            for (int j=i*i;j<N;j+=i)
                c[j]=true;
        }
}

void bkt(int p,int val)
{
    if (p==d[0]+1)
    {
        rez+=a/val;
        return;
    }
    bkt(p+1,val);
    bkt(p+1,val*d[p]);
}

int main()
{
    long long t,i;
    in>>t;
    ciur();
    while (t--)
    {
        in>>a>>b;
        rez=0;
        d[0]=0;
        for (i=1;prim[i]*prim[i]<=b && i<=prim[0];i++)
            if (b%prim[i]==0)
            {
                d[++d[0]]=-prim[i];
                while (b%prim[i]==0)
                    b/=prim[i];
            }
        if (b!=1)
            d[++d[0]]=-b;
        bkt(1,1);
        out<<rez<<"\n";
    }
    return 0;
}