Cod sursa(job #2089929)

Utilizator mircearoataMircea Roata Palade mircearoata Data 17 decembrie 2017 12:56:24
Problema Pascal Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.42 kb
#include <iostream>
#include <fstream>

using namespace std;

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

long long r,d,cnt;

long long legendre(long long n, long long p)
{
    long long s=0;
    long long power = p;
    if(p==0)
        return 0;
    while(n/power>0)
    {
        s+=n/power;
        power*=p;
    }
    return s;
}

bool is4=false;

int main()
{
    in>>r>>d;
    if(d==2 || d==3 || d==5 || d==4)
    {
        if(d==4)
        {
            d=2;
            is4=true;
        }
        for(int i = 1; i<=r/2; i++)
        {
            if(legendre(r,d)-legendre(r-i,d)-legendre(i,d)>(is4?1:0))
            {
                if(i==r/2)
                {
                    if(r%2==0)
                        cnt++;
                    else
                        cnt+=2;
                }
                else
                    cnt+=2;
            }
        }
    }
    else
    {
        for(int i = 1; i<=r/2; i++)
        {
            if(legendre(r,2)-legendre(r-i,2)-legendre(i,2)>0 && legendre(r,3)-legendre(r-i,3)-legendre(i,3)>0)
            {
                if(i==r/2)
                {
                    if(r%2==0)
                        cnt++;
                    else
                        cnt+=2;
                }
                else
                    cnt+=2;
            }
        }
    }
    out<<cnt;
    return 0;
}