Cod sursa(job #10131)

Utilizator crawlerPuni Andrei Paul crawler Data 27 ianuarie 2007 21:53:26
Problema Pascal Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.96 kb
#include <stdio.h>
#include <string.h>
#include <math.h>

long x[100002],p[10024],dim;

long f(long N,long p1)
 {
  long q=N;
  q/=p1;
  if(q)
   return q+f(N,p1*p1);
    else
   return 0;
 }

int ver(long R,long C)
 {
  register long a=R,b=R-C,c=C,i,tmp;

  for(i=1;i<=dim;++i)
   {
    tmp=f(a,p[i]);
    tmp-=f(b,p[i]);
    tmp-=f(c,p[i]);
    if(tmp<x[i])
     return 0;
   }

  return 1;
 }


int main()
 {
   freopen("pascal.in","r",stdin);
   freopen("pascal.out","w",stdout);

   register long i,j,n,m,X=0,n1,m1;

   scanf("%ld%ld",&n,&m);

   m1=m;

   for(i=2;i<=m1;++i)
    if(m1%i==0)
     {
      ++dim;
      p[dim]=i;
      while(m1%i==0)
       {
        ++x[dim];
        m1/=i;
       }
     }

   if(m1!=1)
    {
     p[++dim]=m1;
     ++x[dim];
    }
    
    
   n1=n>>1;

   for(i=1;i<=n1;++i)
    X+=ver(n-1,i-1)<<1;

   if(n&1)
    X+=ver(n-1,n1);

   printf("%ld\n",X);

   return 0;
 }