Pagini recente » Cod sursa (job #3187411) | Cod sursa (job #1672361) | Cod sursa (job #1923322) | Cod sursa (job #643870) | Cod sursa (job #926211)
Cod sursa(job #926211)
#include<stdio.h>
#include<iostream>
#include<algorithm>
using namespace std;
#define max 1000000
#define mod 9973
long long m,a,b,fact[30];
int fprim[80000];
bool vis[max];
void ciur()
{
fprim[++fprim[0]]=2;
for(int i=3;i<max;i+=2)
if(!vis[i])
{
fprim[++fprim[0]]=i;
for(int j=i+i;j<max;j+=i)
vis[j]=1;
}
}
void solve()
{
long long t=0,d=0;
while(b>1)
{
d++;
if(b%fprim[d]==0)
{
fact[++t]=fprim[d];
while(b%fprim[d]==0)
b/=fprim[d];
}
if(fprim[d]>(sqrt((long double)b)) && b>1)
{
fact[++t]=b;
b=1;
}
}
long long sol=a;
for(int i=1; i< (1<<t);i++)
{
long long nr=0,prod=1;
for(int j=0;j<t;j++)
{
if( (1<<j) & i )
{
prod*=fact[j+1]*1LL;
nr++;
}
}
if(nr%2) nr=-1;
else nr=1;
sol=sol+( 1LL*nr*a/prod);
}
printf("%lld\n",sol);
}
int main()
{
freopen("pinex.in","r",stdin);
freopen("pinex.out","w",stdout);
ciur();
scanf("%lld",&m);
for(int i=1;i<=m;i++)
{
scanf("%d%d",&a,&b);
solve();
}
return 0;
}