Cod sursa(job #2607316)
Utilizator | Data | 29 aprilie 2020 16:44:09 | |
---|---|---|---|
Problema | Principiul includerii si excluderii | Scor | 0 |
Compilator | cpp-64 | Status | done |
Runda | Arhiva educationala | Marime | 0.83 kb |
#include <bits/stdc++.h>
#define ll long long
using namespace std;
ifstream in("pinex.in");
ofstream out("pinex.out");
int main() {
int t;
in>>t;
while(t--){
ll a, b;
in>>a>>b;
vector<ll>v;
for(ll i=2; i*i<=b; ++i){
if(b%i==0){
v.push_back(i);
while(b%i==0){
b/=i;
}
}
}
if(b>1){
v.push_back(b);
}
ll s=0;
for(ll i=1; i<(1LL<<((v.size())); i++){
ll nr=0, x=1;
for(int j=0; j<v.size(); ++j){
if(i&(1LL<<j)){
nr++;
x*=v[j];
}
}
s+=(nr%2==1?1:-1)*(a/x);
}
out<<a-s<<"\n";
}
return 0;
}