Cod sursa(job #1141427)

Utilizator iordache.bogdanIordache Ioan-Bogdan iordache.bogdan Data 12 martie 2014 21:15:24
Problema Principiul includerii si excluderii Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.07 kb
#include <fstream>

using namespace std;

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

long long t,a,b,n,i,j,cnt,k,last,sol,p;

long long prime[100005],v[100005];

bool o[1000002];

int main() {
    for(i=2;i<=1000001;i++) {
        if(o[i]==0) {
            prime[++k]=i;
            for(j=2*i;j<=1000001;j++)
                o[j]=1;
        }
    }
    f>>t;
    while(t--) {
        f>>a>>b;
        n=0;
        for(i=1;i<=k && prime[i]*prime[i]<=b;i++) {
            if(b%prime[i]==0)
                v[++n]=prime[i];

            while(b%prime[i]==0) {
                b/=prime[i];
            }
        }
        if(b!=1)
            v[++n]=b;
        last=(1LL<<n)-1;
        sol=a;
        for(i=1;i<=last;i++) {
            cnt=0;p=1;
            for(j=0;j<n;j++)
                if(((i>>j)&1LL)==1LL) {
                    cnt++;
                    p*=v[j+1];
                }
            if(cnt%2==0)
                sol+=a/p;
            else
                sol-=a/p;
        }
        g<<sol<<"\n";
    }
    return 0;
}