Pagini recente » Cod sursa (job #1065716) | Cod sursa (job #2728487) | Cod sursa (job #1877253) | Cod sursa (job #2439566) | Cod sursa (job #1625932)
#include <bits/stdc++.h>
#define DIM 1000002
using namespace std;
ifstream fin("pinex.in");
ofstream fout("pinex.out");
long long a,b,K;
long long v[DIM],ciur[DIM],prim[DIM],primcnt;
long long T;
int main(){
fin >> T;
for(int i=2;i<DIM;i++)
if(!ciur[i]){
for(int j=i+i;j<DIM;j+=i)
ciur[j]=1;
prim[++primcnt] = i;
}
while(T--){
fin >> a >> b;
K=0;
for(int i=1;i<=primcnt && prim[i]<=b;i++)
if(b%prim[i]==0)
v[++K]=prim[i];
long long mask = (1<<K) - 1;
long long ans=0;
for(int i=1;i<=mask;i++){
long long P=1,cnt=0;
for(int j=0;j<K;j++)
if((i&(1<<j))){
P*=v[j+1];
cnt++;
}
if(cnt%2)
ans += a/P;
else
ans -= a/P;
}
ans = a - ans;
fout << ans << "\n";
}
fin.close();fout.close();
return 0;
}