10061 - How many zero's and how many digits ?

#include<stdio.h>
#include<math.h>
int a[1000000];
double bits(int n)
{
 double bit=0;
 while(n>0)
 {
  bit+=log10(n);
  n--;
 }
 return bit;
}
int is_p(int a,int b)
{
 int temp,found=0;
 if(a<b)
 {
  temp=a;
  a=b;
  b=temp;
 }
 temp=b;
 while(a%temp!=0||b%temp!=0)
 {
  temp--;
 }
 return temp;
}
int main()
{
 double s;
 long i,j,N,base,b,c,n,bit,tail;
 while(scanf("%ld%ld",&n,&base)!=EOF)
 {
  s=bits(n)/log10(base)+1e-10;
  bit=(int)ceil(s);
  if(n==0)
  {
   printf("0 1\n");
   continue;
  }
  tail=0;
  N=0;
  for(i=2;i<=n;i++)
  {
   j=i;
   while(j%base==0)
   {
    j/=base;
    tail++;
   }
   j=is_p(j,base);
   if(j!=1)
     a[N++]=j;
  }
  for(i=0;i<bit;i++)
  {
   b=base;
   for(j=0;j<N;j++)
   {
    if(a[j]!=1)
    {
     c=is_p(b,a[j]);
     if(c!=1)
     {
       b/=c;
       a[j]/=c;
     }
    }
    if(b==1)
     break;
    if(c==1)
     continue;
   }
   if(b!=1)
    break;
  }
  tail+=i;
  printf("%ld %ld\n",tail,bit);
 }
 return 0;
}

你可能感兴趣的:(zero)