Pagini recente » Cod sursa (job #1543568) | Cod sursa (job #1359621) | Cod sursa (job #122821) | Cod sursa (job #179724) | Cod sursa (job #1236809)
#include <fstream>
#include <bitset>
using namespace std;
#define MAX 100000000
ifstream fin("pinex.in");
ofstream fout("pinex.out");
long long m,pmax,gata,nr;
long long a,b,pi,sigma;
bitset<MAX> prim;
bitset<MAX> s;
long long v[100000000],p[100000];
void ciur(){
v[0]=2ll;
pmax=1;
for(long long i=3;i<MAX;i+=2){
if(prim[i]==0){
v[pmax++]=i;
for(long long j=i*i;j<MAX;j+=i+i) prim[j]=1;
}
}
}
int main(){
fin>>m;
ciur();
for(int k=1;k<=m;++k){
fin>>a>>b;
pmax=0;
gata=0;
for(int i=0;v[i]<=b;++i){
if(b%v[i]==0){
p[pmax++]=v[i];
while(b%v[i]==0) b/=v[i];
}
}
while(!gata){
pi=1;
nr=0;
for(int i=0;i<pmax;++i) if(s[i]){
pi*=p[i];
nr++;
}
if(nr==0)
sigma=0;
else{
if(nr%2==1)
sigma+=a/pi;
else
sigma-=a/pi;
}
int j;
for(j=0;j<pmax && s[j];++j) s[j]=0;
if(j==pmax) gata=1;
else s[j]=1;
}
fout<<a-sigma<<'\n';
}
return 0;
}