Cod sursa(job #2595410)

Utilizator Katherine456719Swan Katherine Katherine456719 Data 7 aprilie 2020 17:54:48
Problema Principiul includerii si excluderii Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.32 kb
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
vector<int>ciur;
vector<int>prime;
bool viz[1000005];
long long r=0;
void fciur()
{
    for(int i=2; i<=1000000; i++)
        if(viz[i]==0)
        {
            ciur.push_back(i);
            for(int j=i+i; j<=1000000; j+=i)
                viz[j]=1;
        }
}
void rez(long long a)
{
    int s=prime.size();
    for(int i=1; i< (1<<s); i++)
    {
        int cont=0;
        long long prod=1;
        for(int j=0; j<s; j++)
            if((1<<j) & i)
            {
                ++cont;
                prod*=prime[j];
            }
        if(cont%2)
            r+=a/prod;
        else
            r-=a/prod;
    }
}
int main()
{
    ifstream f("pinex.in");
    ofstream g("pinex.out");
    ios::sync_with_stdio(false);
    f.tie(0);
    g.tie(0);
    fciur();
    int m;
    f>>m;
    for(int i=1; i<=m; i++)
    {
        long long a,b;
        f>>a>>b;
        prime.clear();
        r=0;
        for(auto x:ciur)
        {
            if(b%x==0)
            {
                prime.push_back(x);
                while(b%x==0)
                    b/=x;
            }
        }
        if(b>1)
            prime.push_back(b);
        rez(a);
        g<<1LL*(a-r)<<"\n";
    }
    return 0;
}