Cod sursa(job #1968866)

Utilizator FlorinHajaFlorin Gabriel Haja FlorinHaja Data 17 aprilie 2017 22:17:02
Problema Principiul includerii si excluderii Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.14 kb
#include <fstream>
#include <iostream>

using namespace std;

ifstream f("pinex.in");
ofstream g("pinex.out");

bool prim[1000003];
int fp[200000], nf, fc[200000], t;
long long a, b, sol, pro;
int i, j, n, m, nr;

void ciur() {
    for (fp[nf=1]=2, i = 3; i <= 1000000; i+=2)
        if (prim[i] == 0)
            for (fp[++nf] = i, j = i+i; j <= 1000000; j += i)
                prim[j] = 1;
}

long long query() {
    t = 0;
    for (i = 1; b > 1; i++) {
        if (b%fp[i]==0){
            while (b%fp[i] == 0) b /= fp[i];
            fc[++t] = fp[i];
        }

        if (1LL*fp[i]*fp[i] > b && b > 1) {
            fc[++t] = b;
            b = 1;
        }
    }
    sol = a;
    for (i = 1; i < (1<<t); i++) {
        pro = 1, nr = 0;
        for (j = 0; j < t; j++)
            if ((i&(1<<j)))
                pro = pro*fc[j+1], nr++;
        cout << a/pro << ' ';
        if (nr%2)
            sol -= a/pro;
        else sol += a/pro;
    }
    cout<<'\n';

    return sol;
}

int main() {
    ciur();
    f >> n;
    for (j = 1; j <= n; j++) {
        f >> a >> b;
        g << query() << '\n';
    }
}