Pagini recente » Cod sursa (job #1014600) | Cod sursa (job #2486831) | Cod sursa (job #1627406) | Cod sursa (job #2094273) | Cod sursa (job #2540530)
#include <bits/stdc++.h>
using namespace std;
ifstream inf("pinex.in");
ofstream outf("pinex.out");
int m, a, b, sol, nr;
vector<int> d, cd;
bitset<1000010> bst;
void bkt(int ,int ,int );
int main()
{
inf>>m;
bst[1]=1;
for(int i=2; i<=1000010; i++)
{
if(!bst[i])
{
d.push_back(i);
for(int j=2*i; j<=1000010; j+=i)
bst[j]=1;
}
}
for(;m;m--)
{
inf>>a>>b;
cd.resize(0);
for(auto it:d)
{
if(b==1)
break;
if(b%it==0)
cd.push_back(it);
while(b%it==0)
b/=it;
}
if(b>1)
cd.push_back(b);
sol=a;nr=1;
bkt(1, cd.size(), 0);
outf<<sol<<'\n';
}
return 0;
}
void bkt(int c,int m,int l)
{
if(c>m)
return;
for(int i=l; i<m; i++)
{
nr*=cd[i];
if(c&1)
sol-=a/nr;
else
sol+=a/nr;
bkt(c+1, m, i+1);
nr/=cd[i];
}
}