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

#include<cstdio>
#include<vector>
#include<cstring>
#include<cmath>
#define MAX 850
#define pi acos(-1)
#define e 2.7182818284590452353602874713527
using namespace std;
vector<long long int>prime;
bool arr[MAX];
void sieve()
{
    long long int i,j,k;
    k=sqrt(MAX);
    for(i=3; i<=k; i+=2)
    {
        if(arr[i]==0)
        {
            for(j=i*i; j<MAX; j+=i+i)
            {
                arr[j]=1;
            }
        }
    }
    for(i=4; i<MAX; i=i+2)
    {
        arr[i]=1;
    }
    prime.push_back(2);
    for(i=3; i<MAX; i=i+2)
    {
        if(arr[i]==0)
        {
            prime.push_back(i);
        }
    }
}
int main()
{
    sieve();
    long long int a,b,m,n,base,i,j,k,div,div1,counter,sum,MIN;
    double c,result;
    while(scanf("%lld%lld",&n,&base)==2)
    {
        if(n==0)
        {
            printf("0 1\n");
            continue;
        }
        m=base;
        MIN=2147483648;
        k=prime.size();
        for(i=0; i<k; i++)
        {
            if(base%prime[i]==0)
            {
                counter=0;
                while(base%prime[i]==0)
                {
                    base=base/prime[i];
                    counter++;
                }
                a=prime[i];
                div=2;
                sum=0;
                while(div>=1)
                {
                    div=n/a;
                    sum+=div;
                    a=a*prime[i];
                }
                div1=sum/counter;
                if(div1<MIN)
                {
                    MIN=div1;
                }
                if(base==1)
                {
                    break;
                }
            }
        }
        c=double(m);
        result=ceil(.5*log(2*pi)/log(c)+(n+0.5)*log(n)/log(c)-(n*log(e)/log(c))+(log(e)/log(c))/(12*n));
        b=result;
        printf("%lld %lld\n",MIN,b);
    }
    return 0;
}

0 comments: (+add yours?)