Pagini recente » Cod sursa (job #588863) | Cod sursa (job #947091) | Cod sursa (job #716456) | Cod sursa (job #882848) | Cod sursa (job #2277763)
#include <fstream>
#include <vector>
#define ll long long
#define MAX 1000001
using namespace std;
ifstream INPUT_FILE("pinex.in");
ofstream OUTPUT_FILE("pinex.out");
bool viz[MAX];
vector<int> nrPrime;
void ciur(){
for(long i=2;i<=MAX;++i){
if(!viz[i]){
nrPrime.push_back(i);
for(long j=2;i*j<=MAX;++j) viz[i*j]=1;
}
}
}
void solve(ll a,ll b){
vector<int> divizori;
for(int tmp=0;tmp<nrPrime.size() && nrPrime[tmp]*nrPrime[tmp]<=b;++tmp){
if(b%nrPrime[tmp]==0){
divizori.push_back(nrPrime[tmp]);
while(b%divizori.back()==0) b/=divizori.back();
}
}
if(b!=1) divizori.push_back(b);
ll sol=a;
for(int i=1;i< (1<<divizori.size());++i){
ll semn,prod;
semn=0;
prod=1;
for(int j=0;j<divizori.size();++j){
if((1<<j)&i){
prod*=divizori[j];
++semn;
}
}
if(semn&1) semn=-1;
else semn=1;
sol+=(semn*a/prod);
}
OUTPUT_FILE<<sol<<"\n";
}
void init() {
ios::sync_with_stdio(false);
ciur();
}
int main() {
ll m;
init();
INPUT_FILE>>m;
for(int i=0;i<m;++i){
ll a,b;
INPUT_FILE>>a>>b;
solve(a,b);
}
return 0;
}