Cod sursa(job #956524)

Utilizator gramatovici_paulGramatovici Paul gramatovici_paul Data 3 iunie 2013 12:13:48
Problema Principiul includerii si excluderii Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 1.11 kb
#include <iostream>
#include <fstream>

using namespace std;

int nr;
long long div1[20],sum=0;
bool ok[20];

void descompune(long long x)
{
    int i;
    nr=0;
    for(i=2;i*i<=x;++i)
    {
        if(x%i==0)
        {
            div1[++nr]=i;
            while(x%i==0)
                x/=i;
        }
    }
    if(x!=1)
    {
        div1[++nr]=x;
    }
}

void bkt(int pos ,long long a)
{
    int i,k=0;
    long long aux=1;
    if(pos==nr)
    {
        for(i=1;i<=nr;++i)
        {
            if(ok[i])
            {
                ++k;
                aux*=div1[i];
            }
        }
        if(k%2==1)
        {
            sum-=a/aux;
        }
        else
            sum+=a/aux;
        return;
    }
    ok[pos+1]=true;
    bkt(pos+1,a);
    ok[pos+1]=false;
    bkt(pos+1,a);
}

int main()
{
    ifstream in("pinex.in");
    ofstream out("pinex.out");
    int m,i;
    long long a,b;
    in>>m;
    for(i=1;i<=m;++i)
    {
        in>>a>>b;
        sum=0;
        descompune(b);
        bkt(0,a);
        out<<sum<<"\n";
    }
    return 0;
}