Pagini recente » Cod sursa (job #1674290) | Cod sursa (job #3149993) | Cod sursa (job #3176898) | Cod sursa (job #285809) | Cod sursa (job #2163948)
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("pinex.in");
ofstream g("pinex.out");
int M, nr, x[50], k;
long long A,B,rez,divs[50];
int pr[80000];
bool v[1000005];
void ciur(long long n)
{
int i, j;
v[0]=1;
v[1]=1;
for(i=4; i<=n; i+=2)
v[i] = 1;
for(i=3; i*i<=n; i+=2)
{
if(v[i]==0)
for(j=i*i; j<=n; j+=i)
v[j]=1;
}
pr[1]=2;
nr=1;
for(int i=3; i<=n; i+=2)
if(v[i]==0)
pr[++nr]=i;
}
void add(int n)
{
int s=1;
long long p=1;
for(int i=1; i<=n; i++)
if(x[i]==1)
{
s*=-1;
p*=divs[i];
}
rez+=semn*A/p;
}
void backt(int n)
{
k=1;
x[1]=-1;
while(k>0)
if(x[k]<1)
{
x[k]++;
if(k==n)
add(n);
else
{
k++;
x[k]=-1;
}
}
else
k--;
}
void sol()
{
int poz=0;
for(int crt=1; crt<=nr && 1LL*pr[crt]*pr[crt]<= B; crt++)
if(B%pr[crt]==0)
{
divs[++poz]=pr[crt];
while(B%pr[crt]==0);
{
B/=pr[crt];
}
}
if(B>1)
{
divs[++poz]=B;
}
rez=0;
backt(poz);
}
int main()
{
f >> M;
ciur(1000000);
for(int i=1; i<=M; i++)
{
f>>A>>B;
if(B==1)
rez=A;
else sol();
g<<rez<<'\n';
}
return 0;
}