Pagini recente » Cod sursa (job #1060609) | Cod sursa (job #1428700) | Cod sursa (job #1443094) | Cod sursa (job #658660) | Cod sursa (job #2859032)
#include<bits/stdc++.h>
#define MOD 1000000
#define int long long
using namespace std;
ifstream f("pinex.in");
ofstream g("pinex.out");
int ciur[MOD],k=0,d[502],ans,a,b;
vector<int>v;
void eratosthenes()
{
int i,j;
for(i=2; i*i<=MOD; i++)
{
if(ciur[i]==0)
{
for(j=i*i; j<=MOD; j+=i)
ciur[j]=1;
}
}
for(i=2; i<=MOD; i++)
{
if(ciur[i]==0)
v.push_back(i);
}
}
void generare(int nrb, int nrtot, int l)
{
if(nrb<=k)
{
generare(nrb+1,nrtot+1,l*d[nrb]);
generare(nrb+1,nrtot,l);
return;
}
if(nrtot%2==1)
ans-=a/l;
else
ans+=a/l;
}
void solve(int x, int y)
{
ans=0;
k=0;
for(auto it:v)
{
if(y!=1)
{
if(y%it==0)
{
y/=it;
k++;
d[k]=it;
while(y%it==0)
y/=it;
}
else
{
if(y<it*it)
{
k++;
d[k]=y;
y=1;
}
}
}
else
break;
}
generare(1,0,1);
g<<ans<<'\n';
}
signed main()
{
int t,l;
f>>t;
eratosthenes();
for(l=1; l<=t; l++)
{
f>>a>>b;
solve(a,b);
}
return 0;
}