Cod sursa(job #2864383)

Utilizator BlueLuca888Girbovan Robert Luca BlueLuca888 Data 7 martie 2022 20:28:55
Problema Principiul includerii si excluderii Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.03 kb
#include <bits/stdc++.h>

using namespace std;

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

int p, prim[100];
int n, m, x, sol, prd, cnt;

void divd(int d){
    while(m % d == 0){
        prim[p++] = d;
        m /= d;
    }
}

int main (){
    ios_base::sync_with_stdio(false);
    fin.tie(nullptr);
    fout.tie(nullptr);

    int teste;
    fin>>teste;
    while(teste--){
        fin>>n>>x;
        sol = 0;

        p = 0;
        m = x;
        divd(2);
        divd(3);
        for(int i=5; i<=m/i; i+=6)
            divd(i), divd(i+2);
        if(m > 1)
            divd(m);

        for(int mask=1; mask < (1<<p); mask++){
            prd = 1;
            cnt = 0;
            for(int i=0; i < p; i++)
                if(mask & (1<<i)){
                    prd *= prim[i];
                    cnt++;
                }
            if(cnt&1)
                sol += n / prd;
            else
                sol -= n / prd;
        }
        fout<<n-sol<<"\n";
    }
    return 0;
}