Cod sursa(job #925952)

Utilizator cruceruvladCruceru Vlad cruceruvlad Data 24 martie 2013 20:42:50
Problema Mins Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.96 kb
#include<stdio.h>
#include<vector>
#define N 1000000
using namespace std;
int c,d,p,nr,ind;
int x[N+2];
int v[N+2][8];

void read()
{
    freopen("mins.in","r",stdin);
    freopen("mins.out","w",stdout);
    scanf("%d%d",&c,&d);
    c--;
    d--;
}

void ciur()
{
    int i,j;
    for(i=2;i<=c;i++)
        if(v[i][0]==0)
        {
            for(j=i;j<=c;j+=i)
            {
                v[j][++v[j][0]]=i;
            }
        }
}

void back(int k)
{
    if(k==1+v[ind][0])
    {
        if(nr&1)
            x[ind]-=d/p;
        else
            x[ind]+=d/p;
        return;
    }
    back(k+1);
    p=p*v[ind][k];
    nr++;
    back(k+1);
    nr--;
    p=p/v[ind][k];
}

void rez()
{
    int i,sol=d;
    for(i=2;i<=c;i++)
    {
        p=1;
        ind=i;
        nr=0;
        back(1);
        sol+=x[i];
    }
    printf("%d\n",sol);
}

int main()
{
    read();
    ciur();
    rez();
    return 0;
}