Cod sursa(job #3293274)

Utilizator Rose_MaryTrandafir Maria Rose_Mary Data 11 aprilie 2025 10:47:47
Problema Principiul includerii si excluderii Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.08 kb
#include <iostream>
#include <fstream>

using namespace std;

ifstream f("pinex.in");
ofstream g("pinex.out");

unsigned long long int divizor[100000];

int main()
{
    unsigned long long m,a,b,i,j,lim,k,cnt,d;
    f>>m;
    while(m--)
    {
        f>>a>>b;
        cnt=0;
        for(i=2; i*i<=b; i++)
        {
            if(b%i==0)
            {
                do
                {
                    b/=i;
                }
                while(b%i==0);
                divizor[++cnt]=i;
            }
        }

        if(b>1) divizor[++cnt]=b;

        lim=1<<cnt;
        d=a;
        for(i=1; i<lim; i++)
        {
            k=0;
            unsigned long long nr=1;
            for(j=0; (1<<j)<=i; j++)
            {
                if((1<<j)&i)
                {
                    k++;
                    nr*=1ULL*(divizor[j+1]);
                }
            }
            if(k%2==0)
                d+=a/nr;
            else d-=a/nr;
        }

            g<<d<<'\n';

    }

    f.close();
    g.close();

    return 0;
}