Cod sursa(job #2187931)

Utilizator Vlad.Vlad Cristian Vlad. Data 26 martie 2018 20:12:09
Problema Principiul includerii si excluderii Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 1.36 kb
#include <fstream>
#include <vector>
#include <iostream>
using namespace std;
ifstream fin("pinex.in");
ofstream fout("pinex.out");
int m;
long long a,b;
vector <long long> v;
int main()
{
    fin>>m;
    for(int i=0;i<m;++i)
    {
        v.clear();
        fin>>a>>b;
        if(b%2==0)
        {
            v.push_back(2);
            while(b%2==0)
            {
                b/=2;
            }
        }
        long long d=3;
        while(d*d<=b)
        {
            if(b%d==0)
            {
                v.push_back(d);
                while(b%d==0)
                {
                    b/=d;
                }
            }
            d+=2;
        }
        if(b!=1)
            v.push_back(b);
        int cop;
        long long s=0;
        int con=0;
        for(int j=0;j<(1<<v.size());++j)
        {
            int pr=1;
            cop=j+1;
            con=0;
            for(int k=0;k<v.size();++k)
            {
                if(cop & 1)
                {
                    pr*=v[k];
                    ++con;
                }
                cop=cop>>1;
            }
            if(pr!=1)
            {
                if(con%2==0)
                {
                    s=s-a/pr;
                }
                else
                {
                    s=s+a/pr;
                }
            }
        }
        fout<<a-s<<"\n";
    }
    return 0;
 }