Cod sursa(job #1955628)

Utilizator dragos231456Neghina Dragos dragos231456 Data 6 aprilie 2017 09:21:05
Problema Principiul includerii si excluderii Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.81 kb
#include <iostream>
#include <fstream>
#include <bitset>
#include <cmath>
using namespace std;
ifstream f("pinex.in");
ofstream g("pinex.out");
long long n,a,b,k,v[1000003],x,rez,m,u[1000003];
bitset<1000003> c;
int main()
{
    for(int i=2;i<=1000;++i)
    {
        for(int j=2;j<=1000000/i;++j)
        {
            c[i*j]=1;
        }
    }
    c[1]=1;
    f>>m;
    for(int z=1;z<=m;++z)
    {
        f>>a>>b; n=rez=0;
        x=sqrt(b);
        for(int i=2;i<=x;++i)
        {
            if(c[i]==0 && b%i==0)
            {
                ++n;
                v[n]=i;
                if(c[b/i]==0)
                {
                    ++n;
                    v[n]=b/i;
                }
            }
        }
        if(n==0)
        {
            n=1;
            v[n]=b;
        }
        for(int i=1;i<=n;++i)
        {
            k=1;
            u[1]=0;
            while(k>0)
            {
                if(u[k]<n)
                {
                    ++u[k];
                    if(k==i)
                    {
                        x=1;
                        for(int j=1;j<=k;++j)
                        {
                            x*=v[u[j]];
                        }
                        if(i%2==1)
                        {
                            rez+=a/x;
                        }
                        else
                        {
                            rez-=a/x;
                        }
                    }
                    else
                    {
                        ++k;
                        u[k]=u[k-1];
                    }
                }
                else
                {
                    --k;
                }
            }
        }
        g<<a-rez<<'\n';
    }
    return 0;
}