Cod sursa(job #2810757)

Utilizator vladdobro07vladdd vladdobro07 Data 30 noiembrie 2021 10:02:17
Problema Principiul includerii si excluderii Scor 70
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.37 kb
#include <fstream>
using namespace std;
ifstream cin("pinex.in");
ofstream cout("pinex.out");
long long prime[77003];
int main() {
        ios_base::sync_with_stdio(false);
        cin.tie(0);
        long long n,a,b,k;
        cin>>n;
        for(int i=1; i<=n; i++) {
                cin>>a>>b;
                k = 0;
                for(int j = 2; j * j <= b; j++) {
                        if(b % j == 0) {
                                prime[k] = j;
                                k++;
                        }
                        while(b % j == 0)
                                b /= j;
                }
                if(b > 1) {
                        prime[k] = b;
                        k++;
                }
                int ans = 0;
                for(int mask = 0; mask < (1 << k); mask++) {
                        long long cnt = 0,prod = 1;
                        for(int j = 0; j < k; j++) {
                                if((1 << j) & mask) {
                                        cnt++;
                                        prod *=  prime[j];
                                }
                        }
                        //cout<<mask<<" "<<ans<<" "<<prod<<'\n';
                        ans += ((cnt & 1) ? -1 : 1) * (a / prod);
                }
                cout<< ans <<'\n';
        }
        return 0;
}