Cod sursa(job #1024697)

Utilizator jul123Iulia Duta jul123 Data 8 noiembrie 2013 23:09:19
Problema Frac Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.33 kb
#include<iostream>
#include<fstream>
#include<cmath>
using namespace std;
bool ciur[200000];
long long m;
long long k;
long long v[200000];
void ciurul()
{

    long long p, nr=0, j, i, r;
    for(i=2; i<=200000; i++)
             ciur[i]=true;
    r=448;
    for(p=2; p<=r; p++)
    {
             if(ciur[p]==1)
             for(j=p*p; j<=200000; j+=p)
                      ciur[j]=false;
    }
    for(i=2;i<=200000;i++)
                     if(ciur[i]==true)
                            {v[nr]=i; nr++;}
}
long long fi( long long u)
{
    long long i,t, p,r, w[200000],j;
    i=0;
    p=0;
    r=1;
    while(v[i]<=m)
    {
        if(m%v[i]==0)
    {
    w[p]=v[i]; p++;
    }
    i++;
    }
    long long s=0;
    for(i=0;i<(1<<p);i++)
        {   r=1;
            t=0;
            for(j=0;j<=p-1;j++)
            if((i>>j)%2==1)
                {r*=w[j];
                t++;}
            if(t%2==0)
                s+=u/r;
            else
                s-=u/r;
        }
    return s;
}
long long binary_search()
{

    long long i, pas=(long long)1<<61;
    for(i=0;pas;pas>>=1)
    {
        if((fi(i+pas))<=k-1)
            i+=pas;
    }
    return i+1;
}
int main()
{
 ifstream f("frac.in");
 ofstream g("frac.out");
 ciurul();
 f>>m>>k;
 int i;
 g<<binary_search();
}