Cod sursa(job #1522746)

Utilizator SlevySlevoaca Stefan-Gabriel Slevy Data 11 noiembrie 2015 22:37:48
Problema Pascal Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.5 kb
#include <bits/stdc++.h>

using namespace std;

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

int n,d;

int main()
{
    in>>n>>d;
    in.close();
    long long int nr = 0;
    int fact1 = 0,fact2=0,fact=0;
    for(int i = 0;i<=n/2;i++)
        {
            if((d==2) || (d==3) || (d==5))
            {
                fact = 0;
                for(int j=d;j<=n;j*=d)
                    {
                        fact+= (n/j - ((n-i)/j + i/j));
                        if(fact > 0)
                            break;
                    }
                if(fact > 0)
                {
                    if(n%2==1)
                    nr+=2;
                    else
                    {
                        if(i==n/2)
                        nr+=1;
                    else
                        nr+=2;
                    }
                }
            }
            else
                if(d==4)
            {
                fact = 0;
                for(int j=2;j<=n;j*=2)
                    {
                        fact+= (n/j - ((n-i)/j + i/j));
                     if(fact >=2)
                            break;
                    }
                if(fact >= 2)
                {
                    if(n%2==1)
                    nr+=2;
                    else
                    {
                        if(i==n/2)
                        nr+=1;
                    else
                        nr+=2;
                    }
                }
            }
            else
                if(d==6)
            {
                fact1 = 0;
                fact2 = 0;
                 for(int j=2;j<=n;j*=2)
                   {
                       fact1+= (n/j - ((n-i)/j + i/j));
                        if(fact1 >=1)
                            break;
                   }
                for(int j=3;j<=3;j*=3)
                    {
                        fact2+= (n/j - ((n-i)/j + i/j));
                         if(fact2 >=1)
                            break;
                    }
                 fact = min(fact1,fact2);
                 if(fact >= 1)
                {
                    if(n%2==1)
                    nr+=2;
                    else
                    {
                        if(i==n/2)
                        nr+=1;
                    else
                        nr+=2;
                    }
                }
            }
        }
    out<<nr<<'\n';
    out.close();
    return 0;
}