Cod sursa(job #2367387)

Utilizator ciutanpCiuta Andrei Calin ciutanp Data 5 martie 2019 10:27:56
Problema Principiul includerii si excluderii Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.97 kb
#include<bits/stdc++.h>
using namespace std;

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

long long divi[31],nr,t,a,b;

void duo()
{
    long long d=2;
    while(b>1)
    {
        if(b%d==0)
        {
            divi[++nr]=d;
            while(b%d==0)
                b/=d;

        }
        if(d>sqrt(b)&& b>1)
        {
            divi[++nr]=b;
            b=1;
        }
        if(d==2)
            d++;
        else
            d+=2;
    }
    long long sol=a;
    for(int i=1;i<(1<<nr);++i)
    {
        long long cate=0,prod=1;
        for(int j=0;j<t;++j)
            if(i&(1<<j))
        {
            prod*=1LL*divi[j+1];
            cate++;
        }
        long long mp;
        if(cate%2)
            mp=-1;
        else
            mp=1;
        sol=sol+1LL*mp*a/prod;
    }
    g<<sol<<'\n';
}

int main()
{
    f>>t;
    for(int i=1;i<=t;++i)
    {
        f>>a>>b;
        nr=0;
        duo();
    }
}