阅读背景:

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

来源:互联网 
#include <iostream>
#include <cmath>
#include <cstring>
using namespace std;
long su(long a,long b,long c)
{
    long d(a);
    while(d%b==0&&d!=1)
    {
        d=d/b;
        c++;
    }
    return c;
}
void sc(long a,long b,long c[10],long d[10])
{
    int k(0);
    long e(a);
    while(e!=1&&k<b)
    {
        if(e%c[k]==0)
        {
            e=e/c[k];
            d[k]++;
        }
        else k++;
    }
}
int main()
{
    long n,m,i,count,j,flag,l,sum,max1;
    long s1[10],s2[810],s3[10];
    double x;
    while(cin>>n>>m)
    {
        count=flag=max1=0;
        x=0;
        j=m;
        memset(s1,0,sizeof(s1));
        memset(s2,0,sizeof(s2));
        memset(s3,0,sizeof(s3));
        for(i=2; i<=m; i++)
            if(j%i==0)
            {
                flag=1;
                sum=0;
                for(l=0; l<max1; l++)
                    if(i==s1[l])
                    {
                        s2[s1[l]]++;
                        sum=1;
                        break;
                    }
                if(sum==0)
                {
                    s1[max1++]=i;
                    s2[i]++;
                }
                j=j/i;
                i--;
            }
            else if(j==1)break;
        for(i=1; i<=n; i++)
        {
            x+=(double)log(i);
            if(flag==0)count+=su(i,m,count);
            else sc(i,max1,s1,s3);
        }
        x=x/log(m)+1e-10;
        if(flag==0)cout<<count<<" "<<((int)x+1)<<endl;
        else
        {
            count=s3[0]/s2[s1[0]];
            for(i=1; i<max1; i++)
                if(count>s3[i]/s2[s1[i]])count=s3[i]/s2[s1[i]];
            cout<<count<<" "<<int(x+1)<<endl;
        }
    }
    return 0;
}#include <iostream>
#include <cmath>
#include <



你的当前访问异常,请进行认证后继续阅读剩余内容。

分享到: