Cod sursa(job #734145)

Utilizator dicu_dariaDaria Dicu dicu_daria Data 13 aprilie 2012 17:35:46
Problema Pascal Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.18 kb
#include <fstream>
using namespace std;
int x,i,d,n,sol,d1,d2,D,x1,x2,div1[5000002],div2[5000002];
int main()
{
    ifstream fi("pascal.in");
    ofstream fo("pascal.out");
    fi>>n>>D;
    if(D==6) { d1=2; d2=3; } else
    if(D==4) d1=2; else d1=D;
    for(i=1;i<=n;i++)
    {
        //calculez divizorii pentru i!
        x=i;
        if(d1!=2) while(x%d1==0) { div1[i]++; x/=d1; } else while((x&1)==0) {div1[i]++; x=x>>1; }
        div1[i]+=div1[i-1];
        if(d2!=0)
        {
            while(x%d2==0) { div2[i]++; x/=d2; }
            div2[i]+=div2[i-1];
        }
    }
    for(i=0;i<=n/2;i++)
    {
        if(D==6)
        {
            x1=div1[n]-div1[i]-div1[n-i];
            x2=div2[n]-div2[i]-div2[n-i];
            if(x1 and x2) sol+=2;
            if(i==n/2 and (n&1)==0) sol--;
            continue;
        }
        else
        if(D==4)
        {
            x1=div1[n]-div1[n-i]-div1[i];
            if(x1>1) sol+=2;
            if(i==n/2 and (n&1)==0) sol--;
            continue;
        }
        else
        {
            x1=div1[n]; x2=div1[n-i]+div1[i];
        }
        if(x1>x2)  sol+=2;
        if(i==n/2 and (n&1)==0) sol--;

    }
    fo<<sol<<"\n";
    return 0;
}