Cod sursa(job #3200791)

Utilizator cristianabalcanuCristiana Balcanu cristianabalcanu Data 5 februarie 2024 19:42:38
Problema Principiul includerii si excluderii Scor 30
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.86 kb
#include <bits/stdc++.h>

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

int n, a, b, r;
int d[55], nrd;

void div(int a)
{
    nrd = 0;
    int ca = a;
    for(int i = 2 ; i <= ca && a > 0 ; i++)
    {
        if(a % i == 0)
        {
            nrd++;
            d[nrd] = i;
        }
        while(a % i == 0)
            a = a / i;
    }
}

void bkt(int ind, int prod, int nrprod)
{
    if(nrprod % 2 == 0 && nrprod != 0)
        r += a / prod;
    if(nrprod % 2 != 0 && nrprod != 0)
        r -= a / prod;
    for(int i = ind ; i <= nrd ; i++)
    {
        bkt(i + 1, prod * d[i], nrprod + 1);
    }
}

int main()
{
    fin >> n;
    while(n > 0)
    {
        n--;
        fin >> a >> b;
        div(b);
        r = a;
        bkt(1, 1, 0);
        fout << r << '\n';
    }
    return 0;
}