Pagini recente » Cod sursa (job #2896684) | Cod sursa (job #227874) | Cod sursa (job #1544726) | Cod sursa (job #408984) | Cod sursa (job #1625980)
#include <fstream>
#include <bitset>
#define DIM 1000002
using namespace std;
ifstream fin("pinex.in");
ofstream fout("pinex.out");
bitset <DIM> v;
bitset <70> s;
long long M,mask,A,B,prim[DIM],N,a[DIM],k;
void ciur(){
v[1]=v[0]=1;
for(int i=2;i<=DIM;i++){
if(!v[i]){
prim[++N]=i;
for(int j=i+i;j<=DIM;j+=i)
v[j]=1;
}
}
}
int main(){
ciur();
fin>>M;
while(M--){
fin>>A>>B;
k=0;
for(int i=1;i<=N && prim[i]<B;i++){
if(B%prim[i]==0){
a[++k]=prim[i];
while(B%prim[i]==0)
B/=prim[i];
}
}
if(B>1)
a[++k]=B;
s.reset();
long long sol=0;
for(int mask=1;mask<(1<<k);mask++){
int par=0;
long long produs=1;
for(int i=0;i<k;i++)
if((mask&(1<<i))!=0){
par++;
produs*=a[i+1];
}
if(par%2)
sol+=A/produs;
else
sol-=A/produs;
}
fout<<A-sol<<"\n";
}
fin.close();fout.close();
return 0;
}