Cod sursa(job #3326187)

Utilizator Mateixx1Trandafir Matei Mateixx1 Data 27 noiembrie 2025 17:23:01
Problema Principiul includerii si excluderii Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.98 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("pinex.in");
ofstream g("pinex.out");

long long t,a,b,divi[100010],rez,cate,lim;

int main() {
    f>>t;
    while(t--) {
        f>>a>>b;
        cate=0;
        for(int i=2; i*i<=b; i++) {
            if(b%i==0) {
                divi[++cate]=i;
                while(b%i==0) {
                    b/=i;
                }
            }
        }
        if(b>1) {
            divi[++cate]=b;
        }
        lim=(1<<cate);
        rez=a;
        for(int i=1; i<lim; i++) {
            long long k=0,cat=1;
            for(long long j=0; (1<<j)<=i; j++) {
                if(i&(1<<j)) {
                    k++;
                    cat*=divi[j+1];
                }
            }
            if(k%2==0) {
                rez+=a/cat;
            } else {
                rez-=a/cat;
            }
        }
        g<<rez<<'\n';
    }
    f.close();
    g.close();
    return 0;
}