Cod sursa(job #1082819)

Utilizator binicBinica Nicolae binic Data 14 ianuarie 2014 22:29:20
Problema Principiul includerii si excluderii Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 1.48 kb
#include<stdio.h>
#include<cmath>
#include<algorithm>
using namespace std;
int z,qw[78500];
long long n,q,i,j,c,t,x,d,p,s,o,w,a[101];
bool p1[1000001];
int main ()
{
    freopen("pinex.in","r",stdin);
    freopen("pinex.out","w",stdout);
    p1[1]=1;
    p1[2]=0;
    q=1;
    qw[1]=2;
    for(i=3;i<=1000000;i+=2)
    {
        if(p1[i]==0)
        {
            q++;
            qw[q]=i;
            if(z==0)
            {
                for(j=i*i;j<=1000000;j+=i)
                {
                    p1[j]=1;
                }
                if((i+2)*(i+2)>1000000)z=1;
            }
        }
    }
    scanf("%lld\n",&n);
    for(i=1;i<=n;i++)
    {
        scanf("%lld %lld",&c,&x);
        t=0;
        d=1;
        while(x>1)
        {
            p=0;
            if(x%qw[d]==0)
            {
                t++;
                a[t]=qw[d];
                while(x%qw[d]==0)x=x/qw[d];
            }
            if(d>sqrt(x)&&x>1)
            {
                t++;
                a[t]=x;
                x=1;
            }
            d++;
        }
        s=c;
        for(j=1;j<(1<<t);j++)
        {
            p=1;
            w=0;
            for(o=0;o<t;o++)
                if((1<<o)&j)
                {
                    w++;
                    p=p*a[o+1];
                }
            if(w%2==1)w=-1;
            else w=1;
            if(p>0)s=s+w*c/p;
        }
        printf("%lld\n",s);
    }
    return 0;
}