Cod sursa(job #1288995)
Utilizator | Data | 9 decembrie 2014 12:43:56 | |
---|---|---|---|
Problema | Principiul includerii si excluderii | Scor | 20 |
Compilator | cpp | Status | done |
Runda | Arhiva educationala | Marime | 1.87 kb |
#include <stdio.h>
#include <cmath>
int div[100000],pos;
bool schimb[100000],ciur[100006];
int a,b,temp,tx=0;
FILE *fin,*fout;
void ver()
{
int ct=0;
int mult=1;
for(int i=1;i<pos;i++)
{
if(schimb[i]==1)
{
ct++;
mult*=div[i];
}
}
if(ct==0) return ;
if(ct%2==0) tx-=a/mult;
else if(ct%2!=0) tx+=a/mult;
}
void bcs(int pt)
{
if(pt==pos) ver();
else
{
for(int i=0;i<=1;i++)
{
schimb[pt]=i;
bcs(pt+1);
}
}
}
int main()
{
for(int i=2;i<=100005;i++)
{
if(ciur[i]==0)
{
for(int j=i;j<100005/i;j++)
{
ciur[i*j]=1;
}
}
}
fin=fopen("pinex.in","r");
fout=fopen("pinex.out","w");
int n;
fscanf(fin,"%d",&n);
for(int i=1;i<=n;i++)
{
pos=1;
fscanf(fin,"%d %d",&a,&b);
if(ciur[b]==0)
{
div[pos]=b;
pos++;
}
else
{
for(int i=2;;i++)
{
if(b==1) break;
if(ciur[i]==0)
{
if(b%i==0)
{
div[pos]=i;
pos++;
while(b%i==0) b/=i;
}
}
}
}
tx=0;
bcs(1);
fprintf(fout,"%d\n",a-tx);
}
}