Cod sursa(job #2488536)

Utilizator roberttrutaTruta Robert roberttruta Data 7 noiembrie 2019 02:12:40
Problema Principiul includerii si excluderii Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.3 kb
#include <fstream>

using namespace std;
long long a,b,i,j,t,p,s,nr,afis,v[1000005],m,r,q,w[1000005];
bool e[1000005],u[1000005],OK;
const long long c=1000000;
int main()
{
    ifstream f("pinex.in");
    ofstream g("pinex.out");

    for(i=2;i*i<=c;i++)
    if(!e[i])
    for(j=i*i;j<=c;j=j+i)
    e[j]=1;
    for(i=2;i<=c;i++)
    if(!e[i])
    w[++q]=i;
f>>m;
for(r=1;r<=m;r++)
{
    f>>a>>b;
    for(i=1;w[i]*w[i]<=b;i++)
    if(b%w[i]==0)
    v[++t]=w[i];
    for(i=1;i<=t;i++)
    while(b%v[i]==0)
    b/=v[i];
    if(b!=1)
    v[++t]=b;

    while(!OK) ///aprindem si stingem becuri
    {
        OK=1; p=1; s=1; nr=0;
        while(p<=t)
        {
            if(OK)
            {
                if(u[p])
                u[p]=0;
                else
                {
                    u[p]=1;
                    OK=0;
                    s*=v[p];
                    nr++;
                }
            }
            else
            {
                if(u[p])
                {
                    s*=v[p];
                    nr++;
                }
            }
            p++;
        }
        if(nr%2)
        afis-=a/s;
        else
        afis+=a/s;
    }
g<<afis<<'\n';
for(i=1;i<=t;i++)
u[i]=0;
t=0;OK=0;afis=0;
}

    return 0;
}