Cod sursa(job #3364019)

Utilizator RobertIon013Ion Robert Andrei RobertIon013 Data 26 august 2026 13:47:20
Problema Principiul includerii si excluderii Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.28 kb
#include <bits/stdc++.h>
#include <fstream>
using namespace std;
ifstream fin ("pinex.in");
ofstream fout ("pinex.out");
vector<long long> ciur;
void ciurul(long long b)
{
    ciur.clear();
    for(long long i=2;i*i<=b;++i)
    {
        if(b%i==0)
        {
            ciur.push_back(i);
            while(b%i==0)
            {
                b/=i;
            }
        }
    }
    if(b>1)
    {
        ciur.push_back(b);
    }
}
long long query(long long a,long long b)
{
    ciurul(b);
    int n=ciur.size();
    long long neprime=0;
    int total_subsets=(1<<n);
    for(int mask=1;mask<total_subsets;++mask)
    {
        long long pr=1;
        int bits_count=0;
        for(int i=0;i<n;++i)
        {
            if((mask>>i)&1)
            {
            pr*=ciur[i];
            bits_count++;
            }
        }
        if(bits_count%2==1)
        {
            neprime+=a/pr;
        }
        else
        {
            neprime-=a/pr;
        }
    }
    return a-neprime;
}
int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    int m;
    if(fin>>m)
    {
        while(m--)
        {
            long long a,b;
            fin>>a>>b;
            fout<<query(a,b)<<'\n';
        }
    }
    return 0;
}