Cod sursa(job #2037143)

Utilizator dragos231456Neghina Dragos dragos231456 Data 11 octombrie 2017 19:51:43
Problema Pascal Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.14 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("pascal.in");
ofstream g("pascal.out");
int v[4][5000005];
int r,d,nr,x,rez,last;

void umple(int l,int val)
{
    for(int i=val;i<=r;i+=val)
    {
        x=i; nr=0;
        while(x%val==0)
        {
            ++nr;
            x/=val;
        }
        v[l][i]=nr;
    }
    for(int i=1;i<=r;++i)
    {
        v[l][i]+=v[l][i-1];
    }
}

void factoriale()
{
    x=d;
    if(d==4) x/=2;
    if(d==6) x/=3;
    umple(1,x);
    if(d==6) umple(2,3);
}

bool ver1(int i)
{
    return(v[1][r]>v[1][i]+v[1][r-i]);
}

bool ver2(int i)
{
    return (v[1][r]>1+v[1][i]+v[1][r-i]);
}

bool ver3(int i)
{
    return(v[1][r]>v[1][i]+v[1][r-i] && v[2][r]>v[2][i]+v[2][r-i]);
}

bool cond(int i)
{
    if(d==2 || d==3 || d==5) return ver1(i);
    if(d==4) return ver2(i);
    else return ver3(i);

}

int main()
{
    f>>r>>d;
    factoriale();
    for(int i=0;i<=r/2;++i)
    {
        last=rez;
        if(cond(i))
        {
            ++rez;
        }
    }
    if(r%2==0) rez+=last;
    else rez+=rez;
    g<<rez;
    return 0;
}