Cod sursa(job #10196)

Utilizator crawlerPuni Andrei Paul crawler Data 27 ianuarie 2007 23:17:35
Problema Pascal Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.67 kb
#include <stdio.h>
#include <string.h>

long x[128],p[128],x2[128],p2[128],x3[128],p3[128];

void trans1(long m1)
 {
  memset(&p,0,sizeof(p));
  memset(&x,0,sizeof(x));

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

   if(m1!=1)
    {
     p[++x[0]]=m1;
     ++x[x[0]];
    }
 }
void trans2(long m1)
 {
  memset(&p2,0,sizeof(p2));
  memset(&x2,0,sizeof(x2));

  long i;
  
  for(i=2;i<=m1;++i)
    if(m1%i==0)
     {
      p2[++x2[0]]=i;
      while(m1%i==0)
       {
        ++x2[x2[0]];
        m1/=i;
       }
     }

   if(m1!=1)
    {
     p2[++x2[0]]=m1;
     ++x2[x2[0]];
    }
 }

void trans3(long m1)
 {
  memset(&p3,0,sizeof(p3));
  memset(&x3,0,sizeof(x3));

  long i;
  
  for(i=2;i<=m1;++i)
    if(m1%i==0)
     {
      p3[++x3[0]]=i;
      while(m1%i==0)
       {
        ++x3[x3[0]];
        m1/=i;
       }
     }

   if(m1!=1)
    {
     p3[++x3[0]]=m1;
     ++x3[x3[0]];
    }
 }

int ver()
 {
  for(int i=1;i<=x[0];++i)
   if(p[i]^p2[i])
    return 0;
     else
   if(x[i]-x2[i]<x3[i])
    return 0;

  return 2;
 }

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=n+1;
   n1=n>>1;


   trans3(n);

   for(i=1;i<=n1;++i)
    {
     --m1;
     trans1(m1);
     trans2(i);
     X+=ver();
    }

   if(n&1)
    {
     --m1;
     trans1(m1);
     trans2(i);
     if(ver())
      ++X;
    }
    
   printf("%ld\n",X);

   return 0;
 }