Cod sursa(job #2539550)

Utilizator Rares31100Popa Rares Rares31100 Data 5 februarie 2020 22:47:52
Problema Mins Scor 60
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.1 kb
#include <bits/stdc++.h>
#define ULL unsigned long long

using namespace std;

ifstream in("mins.in");
ofstream out("mins.out");

int c,d;
ULL sum;
vector <int> Div[1000000];
bitset <1000000> noPrim;

void ciur()
{
    for(int i=2;i<=c;i++)
        if(!noPrim[i])
        {
            Div[i].push_back(i);

            for(int j=2;j<=c/i;j++)
            {
                Div[i*j].push_back(i);
                noPrim[i*j]=1;
            }
        }
}

int main()
{
    in>>c>>d;
    c--;d--;

    ciur();

    sum=d;
    for(int i=2;i<=c;i++)
    {
        int fin=1<<( Div[i].size() );
        int sumPart=d;

        for(int k=1;k<=fin-1;k++)
        {
            int dvr=1;
            int nrI=0;

            for(int j=0;j<Div[i].size();j++)
                if( k&(1<<j) )
                {
                    dvr*=Div[i][j];
                    nrI++;
                }

            if(nrI%2)
                sumPart-=d/dvr;
            else
                sumPart+=d/dvr;
        }

        sum+=(ULL)sumPart;
    }

    out<<sum;

    return 0;
}