Cod sursa(job #3153321)

Utilizator Luca07Nicolae Luca Luca07 Data 29 septembrie 2023 09:56:06
Problema Principiul includerii si excluderii Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.57 kb
#include <fstream>
#include<vector>
using namespace std;

#define ll long long

ifstream cin("pinex.in");
ofstream cout("pinex.out");

vector<ll> v;

int main()
{
    ll i, j, nr,t,a,b, n;

    cin >> t;

    while (t > 0) {
        cin >> a >> b;

        ll d = 2, len = 0, res = 0;

        while (b > 1) {
            if (b % d == 0) {
                v.push_back(d);
                len++;
                //res += a / d;
                while (b % d == 0) {
                    b /= d;
                }
            }
            if (d * d > b) {
                if (b == 1)
                    break;
                v.push_back(b);
                len++;
                //res += a / b;
                b = 1;
            }
            else {
                d++;
            }
        }

        ll pw = ((ll)1 << len);
        ll nr;
        for (nr = 1; nr < pw; nr++) {
            ll pt = 1, cnt = 0;
            for (i = 0; i < len; i++) {
                if (nr & (1 << i)) {
                    pt *= v[i];
                    cnt++;
                }
            }
            if (cnt % 2 == 0)
                res -= a / pt;
            else
                res += a / pt;
        }

        /*if (len > 2) {
            ll pt = 1, cnt = 0;
            for (i = 0; i < len; i++) {
                if (nr & (1 << i)) {
                    pt *= v[i];
                }
            }
            res += a / pt;
        }*/

        cout << a - res << "\n";

        v.clear();
        t--;
    }
    return 0;
}