Cod sursa(job #2985024)

Utilizator Zed1YasuoAlex Birsan Zed1Yasuo Data 25 februarie 2023 15:19:28
Problema Principiul includerii si excluderii Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.31 kb
#include <fstream>
#include <vector>
#define ll long long
using namespace std;
ifstream f("pinex.in");
ofstream g("pinex.out");
long long m,x,y;
const int N=1e6+5;
int a[N+100];
vector<int>b;
void ciur()
{
    for(int i=2;i*i<=N;i++)
        if(a[i]==0)
            for(int j=i*i;j<=N;j+=i)
                a[j]=1;
    for(int i=2;i<=N;i++)
        if(a[i]==0)
            b.push_back(i);
}
int main()
{
    f>>m;
    ciur();
    while(m--)
    {
        f>>x>>y;
        vector<int>fct;
        for(auto t : b)
        {
            if(y==1)
                break;
            if(t*t>y)
                break;
            if(y%t==0)
                fct.push_back(t);
            while(y%t==0)
                y/=t;
        }
        if(y!=1)
            fct.push_back(y);
        long long ans=x;
        int all=(1<<(fct.size()));
        for(int i=1;i<all;i++)
        {
            int bts=0;
            long long  sum=1;
            for(int j=0;j<fct.size();j++)
                if((1<<j)& i)
                {
                    bts++;
                    sum*=fct[j];
                }
          //  g<<x<<" "<<sum<<'\n';
            if(bts%2)
                ans-=(x/sum);
            else
                ans+=(x/sum);
        }
        g<<ans<<" ";
    }
    return 0;
}