题目大意:让求n!在base进制下的位数以及末尾0的连续个数。

题目分析:一个m位的b进制数N,最小是b^(m-1),最大不超过b^m,即b^(m-1)≤N<b^m。解不等式,得log10(N)/log10(b)<m≤log10(N)/log10(b)+1。

至于0的个数,要对n!分解质因数,对base分解质因数。看n!的质因数中能凑出多少个base。能凑出的base的个数就是末尾0的个数。设n!与base的共同质因数所构成的集合为s1。base的质因数构成的集合为s2,则末尾0的个数就是min(s1(s2(i))/s2(i))。

其实,这道题无非就是多个算法的整合。筛素数+大整数分解质因数。

代码如下:

# include<iostream>
# include<cstdio>
# include<cmath>
# include<map>
# include<cstring>
# include<algorithm>
using namespace std;
const int N=<<;
double a[N+];
int pri[],mark[];
map<int,int>m[];
void init()
{
a[]=log10(1.0);
for(int i=;i<=N;++i)
a[i]=a[i-]+log10(i);
for(int i=;i<=;++i){
int n=i;
int a=;
while(a*a<=n){
while(n%a==){
++m[i][a];
n/=a;
}
++a;
}
if(n>)
++m[i][n];
}
pri[]=;
memset(mark,,sizeof(mark));
for(int i=;i<=;++i){
if(!mark[i])
pri[++pri[]]=i;
for(int j=;j<=pri[]&&i*pri[j]<=;++j){
mark[i*pri[j]]=;
if(i%pri[j]==)
break;
}
}
}
int f(int n,int k)
{
map<int,int>mp;
for(int i=;i<=n;++i){
int n=i;
for(int j=;j<=pri[]&&pri[j]<=k;++j){
while(n%pri[j]==){
++mp[pri[j]];
n/=pri[j];
}
}
}
map<int,int>::iterator it;
int ans=<<;
for(it=m[k].begin();it!=m[k].end();++it){
ans=min(ans,mp[it->first]/(it->second));
}
return ans;
}
int g(int n,int k)
{
double ans=a[n]/log10(k)+1.0;
return (int)ans;
}
int main()
{
init();
int n,k;
while(scanf("%d%d",&n,&k)!=EOF)
{
printf("%d %d\n",f(n,k),g(n,k));
}
return ;
}

UVA-10061 How many zero's and how many digits ? (数论)的更多相关文章

  1. UVA 10061 How many zero's and how many digits ? (m进制,阶乘位数,阶乘后缀0)

    题意: 给出两个数字a和b,求a的阶乘转换成b进制后,输出 (1)后缀中有多少个连续的0? (2)数a的b进制表示法中有多少位? 思路:逐个问题解决. 设a!=k.  k暂时不用直接转成b进制. (1 ...

  2. uva 10061 How many zero's and how many digits ?

    How many zeros and how many digits? Input: standard input Output: standard output Given a decimal in ...

  3. How many zero's and how many digits ? UVA - 10061

    Given a decimal integer number you will have to find out how many trailing zeros will be there in it ...

  4. Uva 10061 进制问题

    题目大意:让求n!在base进制下的位数以及末尾0的连续个数. 多少位 log_{10}256=log_{10}210^2+log_{10}510^1+log_{10}6*10^0 可以发现,只和最高 ...

  5. UVA - 10061 How many zero&#39;s and how many digits ?

    n!=x*b^y, 当x为正整数时,最大的y就是n!末尾0的个数了, 把n,b分别拆成素因子相乘的形式: 比如, n=5,b=16 n=5,b=2^4, 非常明显,末尾0的个数为0 10进制时,n!= ...

  6. uva 10061(数学)

    题解:题目要在b进制下输出的是一个数字阶乘后有多少个零,然后输出一共同拥有多少位.首先计算位数,log(n)/log(b) + 1就是n在b进制下有多少位,而log有个公式就是log(M×N) = l ...

  7. uva 10581 - Partitioning for fun and profit(记忆化搜索+数论)

    题目链接:uva 10581 - Partitioning for fun and profit 题目大意:给定m,n,k,将m分解成n份,然后依照每份的个数排定字典序,而且划分时要求ai−1≤ai, ...

  8. UVA - 12716 GCD XOR(GCD等于XOR)(数论)

    题意:输入整数n(1<=n<=30000000),有多少对整数(a, b)满足:1<=b<=a<=n,且gcd(a,b)=a XOR b. 分析:因为c是a的约数,所以枚 ...

  9. UVA题目分类

    题目 Volume 0. Getting Started 开始10055 - Hashmat the Brave Warrior 10071 - Back to High School Physics ...

  10. n!在k进制下的后缀0

    问n! 转化成k进制后的位数和尾数的0的个数.[UVA 10061 How many zeros and how many digits?] Given a decimal integer numbe ...

随机推荐

  1. python学习读取配置文件

    配置文件作为一种可读性很好的格式,非常适用于存储程序中的配置数据. 在每个配置文件中,配置数据会被分组(比如“config”和 “cmd”). 每个分组在其中指定对应的各个变量值.如下: # 定义co ...

  2. MySQL Crash Course #03# Chapter 5. 6 排序. BETWEEN. IS NULL

    索引 排序检索的数据 SQL 过滤 vs. 应用程序过滤 简单 Where 补充:大小写敏感. BETWEEN. IS NULL Sorting Retrieved Data mysql> SE ...

  3. MySQL分区(Partition)功能

    引用地址:http://blog.csdn.net/tjcyjd/article/details/11194489 自5.1开始对分区(Partition)有支持 = 水平分区(根据列属性按行分)=举 ...

  4. 对于“机器视觉(computer version)”的反思

    做图像有一段时间了,几个问题进行反思,欢迎讨论 1.机器视觉的本质是什么? 我认为就是通过计算机和数学的方法,对一定形式存储的2d或3d的视觉信号进行增强.延伸,以增加信号的强度: 2.机器视觉的第一 ...

  5. noip 邮票面值设计 - 搜索 - 动态规划

    描述 给定一个信封,最多只允许粘贴N张邮票,计算在给定M(N+M<=10)种邮票的情况下(假定所有的邮票数量都足够),如何设计邮票的面值,能得到最大max ,使得1-max之间的每一个邮资值都能 ...

  6. 维特比算法Python实现

    前言 维特比算法是隐马尔科夫问题的一个基本问题算法.维特比算法解决的问题是已知观察序列,求最可能的标注序列. 什么是维特比算法? 维特比算法尽管是基于严格的数学模型的算法,但是维特比算法毕竟是算法,因 ...

  7. vim常用的配置

    .vimrc配置 syntax enable syntax on set relativenumber set autoindent set tabstop=4 set expandtab " ...

  8. JavaScript:正则表达式 前瞻 找位置

    js中全部都是顺序环视 顺序环视匹配过程 对于顺序肯定环视(?=Expression)来说,当子表达式Expression匹配成功时,(?=Expression)匹配成功,并报告(?=Expressi ...

  9. Win7系统中如何查看当前文件被哪一个程序占用了

    https://superuser.com/questions/117902/find-out-which-process-is-locking-a-file-or-folder-in-windows ...

  10. 51NOD 1069 Nim游戏

    1069 Nim游戏   有N堆石子.A B两个人轮流拿,A先拿.每次只能从一堆中取若干个,可将一堆全取走,但不可不取,拿到最后1颗石子的人获胜.假设A B都非常聪明,拿石子的过程中不会出现失误.给出 ...