Cod sursa(job #3153330)

Utilizator al1yzalecu izsak al1yz Data 29 septembrie 2023 10:26:42
Problema Principiul includerii si excluderii Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.12 kb
#include <fstream>
#include <vector>
#include <bitset>
using namespace std;
ifstream cin("pinex.in");
ofstream cout("pinex.out");
int main()
{
    long long t;
    cin>>t;
    for(long long i=0;i<t;i++)
    {
        long long a,b;
        cin>>a>>b;
        vector <long long> div;
        long long cb=b,d=2;
        while(cb>1)
        {
            long long cnt=0;
            while(cb%d==0&&cb>1)
            {
                cb/=d;cnt++;
            }
            if(cnt)
            {
                div.push_back(d);
            }
            d++;
            if(cb>1&&d*d>cb)d=cb;
        }
        long long k=(1<<div.size());
        long long sum=0;
        for(long long i=1;i<k;i++)
        {
            long long p=1,cnt=0;
            for(long long j=0;j<div.size();j++)
            {
                if(i & (1<<j))
                {
                    cnt++;
                    p*=div[j];
                }
            }
            if(p>a)continue;
            if(cnt%2==1)sum+=a/p;
            else sum-=a/p;
        }
        cout<<a-sum<<endl;
    }
    return 0;
}