Cod sursa(job #1641503)

Utilizator cristibogdanPatrascu Cristian cristibogdan Data 8 martie 2016 23:46:14
Problema Principiul includerii si excluderii Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 1.19 kb
#include <fstream>

using namespace std;
ifstream f("pinex.in");
ofstream g("pinex.out");
int x,y,n,i,ciur[1000001],prim[1000001],vv[1000001],nrf;
int factori()
{
    int p=0 ;
    for(int i=2;i<1000000;i++)
    {
        if(ciur[i]==0)
        {
            for(int j=i+i;j<1000000;j+= i)
                ciur[j]=1;
            prim[p]=i;
            p++;
        }
    }
    return p;
}
int descompune(long long b)
{
    int nrfac = 0;
    for(int i=0;i<nrf&&b!=1;i++)
        if(b%prim[i]==0)
        {
            while(b%prim[i]==0)
                b=b/prim[i];
            vv[nrfac++]= prim[i];
        }
    if(b!=1)
        vv[nrfac++]=b;
    return nrfac;
}
long long sum(int nr)
{
    long long s = 0;
    for(int i=1;i<(1<<nr);i++)
    {
        int nr1 = 0;
        long long p=1;
        for(int j=0;j<nr;j++)
            if((i&(1<<j))!=0)
            {
                p*=vv[j];
                nr1++;
            }
        if (nr1%2==0)
            s-=x/p;
        else
            s+=x/p;
    }
    return s;
}


int main()
{
    f>>n;
    nrf=factori();
for(i=1;i<=n;i++){
    f>>x>>y;
    g<<x-sum(descompune(y))<<'\n';
}
    return 0;
}