Pagini recente » Cod sursa (job #1675361) | Cod sursa (job #240762) | Cod sursa (job #2145731) | Cod sursa (job #2884251) | Cod sursa (job #2773141)
#include <bits/stdc++.h>
using namespace std;
ifstream fin ("pinex.in");
ofstream fout ("pinex.out");
const int LIM = 1000000;
bitset <LIM + 5> ok;
int prim, p[100005];
int semn[]={-1, 1};
int t, a, b, sol;
int m, e, d[20];
int f[20];
void bt(int k, int crt, int lst){
if(k > 1){
sol += (a/crt) * semn[(k-1)%2];
if(k > m)
return;
}
for(int i=lst+1; i<=m; i++)
bt(k+1, crt*d[i], i);
}
int main (){
ok[0]=ok[1]=1;
for(int i=4; i<=LIM; i+=2)
ok[i]=1;
for(int i=3; i<=LIM/i; i+=2)
if(ok[i] == 0)
for(int j=i*i; j<=LIM; j+=i)
ok[j]=1;
p[++prim]=2;
for(int i=3; i<=LIM; i+=2)
if(ok[i] == 0)
p[++prim]=i;
fin>>t;
for(int test=1; test<=t; test++){
fin>>a>>b;
m=0; sol=0;
for(int i=1; p[i] <= b / p[i]; i++){
e=0;
while(b%p[i] == 0){
e=1;
b/=p[i];
}
if(e)
d[++m]=p[i];
}
if(b != 1)
d[++m]=b;
bt(1, 1, 0);
fout<<a-sol<<"\n";
}
return 0;
}