• zoj 3621 Factorial Problem in Base K


    题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=4745

    解题思路:首先将 k 进制表示的 s 转成十进制的 n, 然后在十进制下求最大的 t, 使得 kt 整除 n! 且 kt+1 不整除 n! .

    先求 k 的标准分解式为 k=p1a1p2a2···pmam, 由于 2≤k≤62 , 故 k 最多可能有 2, 3, 5, 7 共 4 个素因子。

    再由 n! 中素数 p 的指数为 [n/p]+[n/p2]+...+[n/pk], 其中pk≤n<pk+1 , 求 n! 中 p 的指数,结果记为 b.

    则 t=min(b/ ai),i=1,2,···,m.

     1 ///////////////////////////////////////////////////////////////////////////
     2 //problem_id: zoj 3621
     3 //user_id: SCNU20102200088
     4 ///////////////////////////////////////////////////////////////////////////
     5 
     6 #include <algorithm>
     7 #include <iostream>
     8 #include <iterator>
     9 #include <iomanip>
    10 #include <cstring>
    11 #include <cstdlib>
    12 #include <string>
    13 #include <vector>
    14 #include <cstdio>
    15 #include <cctype>
    16 #include <cmath>
    17 #include <queue>
    18 #include <stack>
    19 #include <list>
    20 #include <set>
    21 #include <map>
    22 using namespace std;
    23 
    24 ///////////////////////////////////////////////////////////////////////////
    25 typedef long long LL;
    26 const double PI=acos(-1.0);
    27 ///////////////////////////////////////////////////////////////////////////
    28 
    29 ///////////////////////////////////////////////////////////////////////////
    30 //Add Code:
    31 ///////////////////////////////////////////////////////////////////////////
    32 
    33 int main(){
    34     ///////////////////////////////////////////////////////////////////////
    35     //Add code:
    36     LL k,i;
    37     string s;
    38     while(cin>>s>>k){
    39         LL n=0,t=0,a[4],b[4]={0},c[4]={0};
    40         for(i=0;i<s.size();i++){  //将k进制的s转化为十进制的n
    41             n=n*k+s[i]-'0'-(isupper(s[i])? 7:0)-(islower(s[i])? 13:0);
    42         }
    43         for(i=2;i<=k;i++){
    44             if(k%i==0){  //i为k的素因子
    45                 while(k%i==0){
    46                     k/=i;
    47                     b[t]++;  //记录k的素因子i的指数
    48                 }
    49                 a[t++]=i;  //记录k的素因子i
    50             }
    51         }
    52         for(i=0;i<t;i++){
    53             LL q=n;
    54             while(q){
    55                 q/=a[i];
    56                 c[i]+=q;
    57             }
    58             c[i]/=b[i];  //记录n!中素数a[i]的指数/k中素数a[i]的指数
    59         }
    60         LL ans=c[0];
    61         for(i=1;i<t;i++){
    62             if(c[i]<ans) ans=c[i];
    63         }
    64         cout<<ans<<endl;
    65     }
    66     ///////////////////////////////////////////////////////////////////////
    67     return 0;
    68 }
    69 
    70 ///////////////////////////////////////////////////////////////////////////
    71 /*
    72 Testcase:
    73 Input:
    74 101 2
    75 12 7
    76 Output:
    77 3
    78 1
    79 */
    80 ///////////////////////////////////////////////////////////////////////////
  • 相关阅读:
    Bootstrap JS插件使用实例(2)-模态对话框
    Java常用正则表达式验证工具类RegexUtils.java
    程序员不是砌砖工人,他们是作家【转】
    js中继承的几种用法总结(apply,call,prototype)
    javascript中apply()方法解析-简单易懂!
    javascript方法 call()和apply()的用法
    高性能优化Web前端
    Javascript类继承-机制-代码Demo【原创】
    初识WEB:输入URL之后的故事【转】
    博客园添加网站统计访问量-操作简单很实用哦!
  • 原文地址:https://www.cnblogs.com/linqiuwei/p/3258408.html
Copyright © 2020-2023  润新知