Cod sursa(job #3244659)

Utilizator AllerAller Aller Aller Data 25 septembrie 2024 21:28:58
Problema Principiul includerii si excluderii Scor 70
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.01 kb
#include <iostream>
#include <fstream>
#include <cmath>

using namespace std;

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

int v[100001], k;

void fact_primi(int n){
    int d=2; k=0;
    while(n>1){
        if(n%d==0){
            v[++k]=d;
            while(n%d==0){
                n/=d;
            }
        }
        d++;
        if(d*d>n){
            d=n;
        }
    }
}

int main()
{
    int n, i, j, l, nr=0;
    long long a, b, p=1, rez=0;
    f>> n;
    for(l=1; l<=n; l++){
        f>> a >> b; rez=a;
        fact_primi(b);
        for(i=0; i<pow(2, k); i++){
            nr=0; p=1;
            for(j=1; j<=k; j++){
                if((i>>(j-1))%2==1){
                    nr++; p*=v[j];
                }
            }
            if(nr==0){
                continue;
            }
            if(nr%2==0){
                rez+=a/p;
            } else {
                rez-=a/p;
            }
        }
        g<< rez << endl;
    }

    return 0;
}