Pagini recente » Cod sursa (job #2178127) | Cod sursa (job #2818444) | Cod sursa (job #2490442) | Cod sursa (job #2181023) | Cod sursa (job #1141436)
#include <fstream>
using namespace std;
ifstream f("pinex.in");
ofstream g("pinex.out");
long long t,a,b,n,i,j,cnt,k,last,sol,p;
long long prime[100005],v[100005];
bool o[1000002];
int main() {
for(i=2;i<=1000001;i++) {
if(o[i]==0) {
prime[++k]=i;
for(j=2*i;j<=1000001;j+=i)
o[j]=1;
}
}
f>>t;
while(t--) {
f>>a>>b;
n=0;
for(i=1;i<=k && prime[i]*prime[i]<=b;i++) {
if(b%prime[i]==0)
v[++n]=prime[i];
while(b%prime[i]==0) {
b/=prime[i];
}
}
if(b!=1)
v[++n]=b;
last=(1LL<<n)-1;
sol=a;
for(i=1;i<=last;i++) {
cnt=0;p=1;
for(j=0;j<n;j++)
if(((i>>j)&1LL)==1LL) {
cnt++;
p*=v[j+1];
}
if(cnt%2==0)
sol+=a/p;
else
sol-=a/p;
}
g<<sol<<"\n";
}
return 0;
}