Pagini recente » Cod sursa (job #2378105) | Cod sursa (job #3177255) | Cod sursa (job #2930884) | Cod sursa (job #1981537) | Cod sursa (job #629193)
Cod sursa(job #629193)
#include<stdio.h>
#include<math.h>
FILE*f=fopen("pinex.in","r");
FILE*g=fopen("pinex.out","w");
int m,o,z,k,v[100000];
int a,b,s[20],sol1;
char w[1000001];
void tipar(int x){
int sol=1;
int nr=0;
for(int dd=1;dd<=z;++dd){
if(s[dd]==1){
sol*=w[dd];
nr++;
}
if(nr%2)
sol1+=a/sol;
else
sol1-=a/sol;
}
}
void back(int x){
if(x>z)
tipar(z);
else
for(int ff=0;ff<=1;++ff){
s[x]=ff;
back(x+1);
}
}
int main(){
fscanf(f,"%d",&m);
for(int i=2;i<=1000000;++i)
if(!w[i]){
for(int j=2*i;j<=1000001;j+=i)
w[i]=1;
v[++k]=i;
}
for(int o=1;o<=m;++o){
fscanf(f,"%d%d",&a,&b);
z=0;
int x=b;
int y=sqrt(x);
for(int j=1;j<=k&&x>1&&v[j]<=y;++j)
if(x%v[j]==0){
while(x%v[j]==0)
x/=v[j];
v[++z]=v[j];
}
back(1);
fprintf(g,"%d\n",sol1);
}
fclose(g);
fclose(f);
return 0;
}