Cod sursa(job #1141595)

Utilizator CostanMiriamCostan Miriam CostanMiriam Data 12 martie 2014 23:35:12
Problema Principiul includerii si excluderii Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.06 kb
#include <fstream>

using namespace std;

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

long long prim[100010],v[100010];

long long t,i,k,r,p,n,j,a,b,rez;

bool f[1000005];

int main () {

    for (i=2;i<=1000001;i++) {
        if (f[i]==0) {
            prim[++k]=i;
            for (j=i+i;j<=1000001;j+=i)
                f[j]=1;
        }
    }
    fin>>t;

    while (t--){
        fin>>a>>b;
        k=0;
        for (i=1;prim[i]*prim[i]<=b;i++)
            if (b%prim[i]==0){
                v[++k]=prim[i];
                while (b%prim[i]==0)
                    b/=prim[i];
            }
        if (b!=1)
            v[++k]=b;
        n=(1LL<<k);
        rez=0;
        for (i=1;i<n;i++) {
            r=0;p=1;
            for (j=0;j<k;j++)
                if(((i>>j)&1LL)==1LL){
                    r++;
                    p*=v[j+1];
                }
            if (r%2==0)
                rez+=a/p;
            else
                rez-=a/p;
        }
        fout<<a+rez<<"\n";
    }

    return 0;
}