Cod sursa(job #590034)

Utilizator BlaugranasEnal Gemaledin Blaugranas Data 15 mai 2011 08:37:13
Problema Pascal Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.12 kb
#include<stdio.h>
#define N 5000001
long n,l=0,i,t,v[N],j,x[N],y[N],r;
int k;
int main()
{freopen("pascal.in","r",stdin);
freopen("pascal.out","w",stdout);
scanf("%ld%d\n",&n,&k);
v[0]=x[0]=y[0]=0;
for(i=1;i<=n;i++)
     {j=i;
     if(k!=4&&k!=6)
            {t=0;
            while(j%k==0)
                    {t++;
                    j/=k;}
            v[i]=v[i-1]+t;}
     if(k==4)
            {while(j%2==0)
                    {x[i-1]++;
                    j/=2;}
            x[i]=x[i-1];}
     if(k==6)
            {r=j;
            while(j%2==0)
                    {x[i-1]++;
                    j/=2;}
            while(r%3==0)
                    {y[i-1]++;
                    r/=3;}
            x[i]=x[i-1];
            y[i]=y[i-1];}}
if(k!=4&&k!=6)
     {for(i=1;i<n;i++)
     if(v[n]>v[i]+v[n-i])
            l++;}
if(k==6)
     {for(i=0;i<n-1;i++)
     if(x[n-1]>x[i]+x[n-2-i]&&y[n-1]>y[i]+y[n-2-i])
            l++;}
if(k==4)
     {for(i=0;i<n-1;i++)
     if(x[n-1]-x[i]-x[n-2-i]>=2)
            l++;}                        
printf("%ld",l);
fclose(stdin);
fclose(stdout);
return 0;}