Pagini recente » Cod sursa (job #2949652) | Cod sursa (job #2943392) | Cod sursa (job #373019) | Cod sursa (job #1930098) | Cod sursa (job #990328)
Cod sursa(job #990328)
#include <fstream>
using namespace std;
ifstream f("pinex.in");
ofstream g("pinex.out");
int count(int x){
int s=0;
for(int i=0;(1<<i)<=x;i++)
s+=(bool)((1<<i)&x);
return s;
}
int main()
{
int *pr=new int[1000001];
bool *ok=new bool[1000001];
for(int i=2;i<1000001;i++)
if(!ok[i]){
pr[++pr[0]]=i;
for(int j=2;i*j<1000001;j++) ok[i*j]=1;
}
int nrc;
f>>nrc;
while(nrc--){
unsigned long long a,b,s=0;
f>>a>>b;
unsigned long long np[101];
np[0]=0;
for(int i=1;i<=pr[0]&&b!=1;i++){
if(b%pr[i]==0){
np[++np[0]]=pr[i];
while(b%pr[i]==0)
b/=pr[i];
}
}
if(b!=1)
np[++np[0]]=b;
int n=np[0];
for(int i=1;i<(1<<n);i++){
int m=count(i);
unsigned long long prs=1;
for(int j=1;j<=n;j++)
if((1<<(j-1))&i)
prs*=np[j];
if(m%2) s+=a/prs;
else s-=a/prs;
}
g<<a-s<<'\n';
}
return 0;
}