Pagini recente » Cod sursa (job #3037842) | Cod sursa (job #1815898) | Profil StarGold2 | Istoria paginii runda/pregatire_lot2_juniori/clasament | Cod sursa (job #1639540)
#include <fstream>
using namespace std;
ifstream fin("pinex.in");
ofstream fout("pinex.out");
long long A,B,nrdiv,M;
long long D[30];
void divizori_primi(long long nr)
{
nrdiv = 0;
for(int i=2;i*i<=nr;i++)
{
if(nr%i==0)
{
D[++nrdiv] = i;
while(nr%i == 0)
nr/=i;
}
}
if(nr!=1)
D[++nrdiv] = nr;
}
long long pinex(long long val)
{
long long i,nr,j;
long long prod,sol = A;
for(i=1;i<=val;i++)
{
nr=0;prod = 1;
for(j=0;j<nrdiv;j++)
{
if((1<<j)&i)
{
nr++;
prod *= D[j+1];
}
}
if(nr%2)
nr = -1;
else
nr=1;
sol = sol + nr * A/prod;
}
return sol;
}
int main()
{
fin>>M;
while(M--)
{
fin>>A>>B;
divizori_primi(B);
fout<<pinex((1<<nrdiv)-1)<<'\n';
}
return 0;
}