Cod sursa(job #3153329)

Utilizator adimiclaus15Miclaus Adrian Stefan adimiclaus15 Data 29 septembrie 2023 10:24:39
Problema Principiul includerii si excluderii Scor 70
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.07 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <bitset>
using namespace std;
int main()
{
    int t;
    ifstream f("pinex.in");
    ofstream g("pinex.out");
    f>>t;
    for(int i=0;i<t;i++)
    {
        int a,b;
        f>>a>>b;
        vector <int> div;
        int cb=b,d=2;
        while(cb>1)
        {
            int 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;
        }
        int k=(1<<div.size());
        int sum=0;
        for(int i=1;i<k;i++)
        {
            int p=1,cnt=0;
            for(int 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;
        }
        g<<a-sum<<endl;
    }
    return 0;
}