zoukankan      html  css  js  c++  java
  • zoj 3621 Factorial Problem in Base K 数论 s!后的0个数

    Factorial Problem in Base K

    Time Limit: 20 Sec  Memory Limit: 256 MB

    题目连接

    http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3621

    Description

    How many zeros are there in the end of s! if both s and s! are written in base k which is not necessarily to be 10? For general base, the digit order is 0-9,A-Z,a-z(increasingly), for example F4 in base 46 is actually 694 in base 10,and f4 in base 46 is 1890 in base 10.

    Input

    There are multiple cases(less than 10000). Each case is a line containing two integers s and k(0 ≤ s < 2^63, 2 ≤ k ≤ 62).

    Output

    For each case, output a single line containing exactly one integer in base 10 indicating the number of zeros in the end of s!.

    Sample Input

    101 2
    12 7
     

    Sample Output

    3
    1

    HINT

    题意

    给你个在k进制下的数S,然后求S!在K进制下,有多少个末尾0
     

    题解:

    首先在10进制下,我们是怎么做的?我们先对10进行了质因数分解,分解成了2和5,然后我们就统计s!中,2和5各有多少个,然后取最少的就好了

    就这样,我们先对k进行质因数分解,然后我们取最少个数就好了

    代码:

    //qscqesze
    #include <cstdio>
    #include <cmath>
    #include <cstring>
    #include <ctime>
    #include <iostream>
    #include <algorithm>
    #include <set>
    #include <vector>
    #include <sstream>
    #include <queue>
    #include <typeinfo>
    #include <fstream>
    #include <map>
    #include <stack>
    typedef long long ll;
    using namespace std;
    //freopen("D.in","r",stdin);
    //freopen("D.out","w",stdout);
    #define sspeed ios_base::sync_with_stdio(0);cin.tie(0)
    #define test freopen("test.txt","r",stdin)  
    #define maxn 200001
    #define mod 10007
    #define eps 1e-9
    int Num;
    char CH[20];
    //const int inf=0x7fffffff;   //нчоч╢С
    const int inf=0x3f3f3f3f;
    inline ll read()
    {
        ll x=0,f=1;char ch=getchar();
        while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
        while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
        return x*f;
    }
    inline void P(int x)
    {
        Num=0;if(!x){putchar('0');puts("");return;}
        while(x>0)CH[++Num]=x%10,x/=10;
        while(Num)putchar(CH[Num--]+48);
        puts("");
    }
    //**************************************************************************************
    
    string s;
    int n;
    const int p[18]={2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61};
    int a[30];
    int main()
    {
        while(cin>>s>>n)
        {
            memset(a,0,sizeof(a));
            ll tmp=0;
            ll k=1;
            for(int i=s.size()-1;i>=0;i--)
            {
                if(s[i]<='9'&&s[i]>='0')
                    tmp+=(s[i]-'0')*k;
                else if(s[i]<='Z'&&s[i]>='A')
                    tmp+=(s[i]-'A'+10)*k;
                else 
                    tmp+=(s[i]-'a'+36)*k;
                k*=n;
            }
            for(int i=0;i<18;i++)
            {
                while(n%p[i]==0&&n>0)
                {
                    n/=p[i];
                    a[i]++;
                }
            }
            ll ans=(1LL<<63)-1;
            for(int i=0;i<18;i++)
            {
                ll now=tmp,tot=0;
                while(now>0)
                {
                    now/=p[i];
                    tot+=now;
                }
                if(a[i]>0)
                    ans=min(ans,tot/a[i]);
            }
            printf("%lld
    ",ans);
        }
        
    }
  • 相关阅读:
    win7破解vs2008
    学习C# via clr 第三版扎记
    html 网页嵌入 QQ MSN 旺旺 Gtalk快速对话框官方代码的方法
    识别打气筒气嘴 法式气嘴、美式气嘴、英式气嘴
    飞信资料
    DCOM 遇到错误 “登录失败:未知的用户名或错误密码
    VS 新建Asp.Net 网站 与 新建Asp.Net web 应用程序区别
    一款网页开发必备,让你欲罢不能的客户网页编辑js控件 百度 UEditor
    一天一小步_我学C#入门精典_第一天
    将DataTable对象输出到新建EXCEL文档中
  • 原文地址:https://www.cnblogs.com/qscqesze/p/4539970.html
Copyright © 2011-2022 走看看