Cod sursa(job #2372027)

Utilizator usureluflorianUsurelu Florian-Robert usureluflorian Data 6 martie 2019 20:56:59
Problema Principiul includerii si excluderii Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.07 kb
#include <bits/stdc++.h>
using namespace std;
ifstream f ("pinex.in");
ofstream g ("pinex.out");
int t,nra,nrb,bst[300],st[3003],nr;
long long val,v[300],p[200010],a,b;
bool viz[1000003];
void solve(int k)
{
    for(int i=st[k-1]+1;i<=nrb;++i)
    {
        st[k]=i;
        long long prod=1;
        for(int i=1;i<=k;++i) prod*=v[st[i]];
        if(k%2) val=val+a/prod;
        else val=val-a/prod;
        if(k!=nrb) solve(k+1);
    }
}
int main()
{
    ios::sync_with_stdio(false);
    for(int i=2;i<=1000000;++i)
    {
        if(!viz[i])
        {
            p[++nr]=i;
            for(int j=2;i*j<=1000000;++j) viz[i*j]=1;
        }
    }
    f>>t;
    for(int i=1;i<=t;++i)
    {
        f>>a>>b;
        int k=1;
        nrb=0;
        val=0;
        while(p[k]*p[k]<=b&&b!=1)
        {
            if(b%p[k]==0)
            {
                v[++nrb]=p[k];
                while(b%p[k]==0) b/=p[k];
            }
            ++k;
        }
        if(b!=1) v[++nrb]=b;
        solve(1);
        g<<a-val<<'\n';
    }
    return 0;
}