Cod sursa(job #1585869)
Utilizator | Cioltan Andrei andy1207 | Data | 31 ianuarie 2016 15:55:10 |
---|---|---|---|
Problema | Principiul includerii si excluderii | Scor | 30 |
Compilator | cpp | Status | done |
Runda | Arhiva educationala | Marime | 0.95 kb |
#include<cstdio>
int v[10001];
int main()
{
int m,f,a,b,d,cb,p,q,i,j,prod,k,s,nr;
freopen("pinex.in","r",stdin);
freopen("pinex.out","w",stdout);
scanf("%d",&m);
for(f=1;f<=m;f++)
{
scanf("%d%d",&a,&b);
d=2;
cb=b;
q=0;
while(cb!=1)
{
p=0;
while(cb%d==0)
{
cb/=d;
p=1;
}
if(p==1)
v[++q]=d;
d++;
}
s=0;
for(i=1;i<(1<<q);i++)
{
nr=0;
prod=1;
for(j=0;j<q;j++)
{
if(i&(1<<j))
{
nr++;
prod*=v[j+1];
}
}
if(nr%2==0)
s-=(a/prod);
else
s+=(a/prod);
}
if(s>=0)
printf("%d\n",a-s);
else
printf("%d\n",a-(s*-1));
}
return 0;
}