Pagini recente » Cod sursa (job #290405) | Cod sursa (job #1561616) | Cod sursa (job #2452680) | Cod sursa (job #61038) | Cod sursa (job #2545970)
#include <fstream>
using namespace std;
ifstream fin("pinex.in");
ofstream fout("pinex.out");
long long di[300000];
int bdiv[300000];
int d[300000];
short int ex[1000004];
long long suma = 0,ct, a;
void bkt(int l)
{
while(l)
{
if(d[l] < ct)
{
d[l]++;
if(l < ct)
{
int sign = -1;
if(l%2 == 1)
sign*=-1;
long long prod = 1;
for(int i = 1; i <= l; i++)
{
prod *= bdiv[d[i]];
}
suma += sign*(a/prod);
l++;
d[l] = d[l-1];
}
else
{
int sign = -1;
if(l%2 == 1)
sign*=-1;
long long prod = 1;
for(int i = 1; i <= l; i++)
{
prod *= bdiv[d[i]];
}
suma += sign*(a/prod);
}
}
else
l--;
}
}
int main()
{
int m;
long long b;
fin>>m;
di[1] = 2;
int cnt = 1;
for(long long i = 3; i <= 1000002; i += 2)
{
if(ex[i] == 0)
{
di[++cnt] = i;
for(long long j =i*i; j <= 1000002; j+=i)
ex[j] = 1;
}
}
for(int i = m; i != 0; i--)
{
suma = 0;
fin>>a>>b;
ct = 0;
for(int i = 1; di[i] * di[i] <= b;i++)
{
if(b%di[i]==0){
bdiv[++ct] = di[i];
d[ct] = 0;
b/=di[i];
}
}
if(b)
bdiv[++ct]= b;
d[ct] = 0;
bkt(1);
fout<<a-suma<<"\n";
}
return 0;
}