uva 10061(数学)
来源:互联网 发布:蒙自电视台网络直播 编辑:程序博客网 时间:2024/05/17 02:31
题解:题目要在b进制下输出的是一个数字阶乘后有多少个零,然后输出一共有多少位。首先计算位数,log(n)/log(b) + 1就是n在b进制下有多少位,而log有个公式就是log(M×N) = logM + logN,n! 的位数用公式可以化为( log(1) + log(2) +...+log(n) ) / log(b) + 1,为了精确再加 10^-6。阶乘后的零的数量计算是根据进制数的最大质因数和其数量确定的,比如10 = 2 × 5,所以10进制的最大质因数是5,数量是num = 1,例如100!中的所有因子除五,能分解出来因子5的数量的和再除num就得到了后导0的数量24。
#include <cstdio>#include <cmath>using namespace std;int find(int n, int b) {int max = -1;//寻找最大质因数int flag1 = 1;//最大质因数数量for (int i = 2; i <= b; i++) {while (b % i == 0) {b = b / i;if (max < i) {max = i;flag1 = 1;}else if (max == i)flag1++;}}int flag2 = 0;//能分解出来的最大质因数的数量int temp;for (int i = 1; i <= n; i++) {temp = i;while (temp % max == 0) {temp /= max;flag2++;}}flag2 = flag2 / flag1;return flag2;}int main() {int n;int b, flag, len;double l;while (scanf("%d%d", &n, &b) != EOF) {flag = l = 0;for (int i = 1; i <= n; i++)l += log(i);len = l / log(b) + 1e-6;flag = find(n, b);printf("%d %d\n", flag, len + 1);}return 0;}
0 0
- uva 10061(数学)
- uva 11427 数学-概率
- UVa 846 Steps (数学)
- uva 数学专题入门
- UVA 10025(数学)
- uva 11538 组合数学
- uva 11401 数学
- uva 113(数学)
- uva 10161(数学)
- uva 621(数学)
- uva 591(数学)
- uva 107(数学)
- uva 573(数学)
- uva 846(数学)
- uva 10499(数学)
- uva 305(数学)
- uva 10790(数学)
- uva 11044(数学)
- 迭代器模式---学习笔记
- 将Java中的数组转换成JS中的数组
- mybatis热部署加载*Mapper.xml文件
- photoshop
- Java Date 和 Calendar
- uva 10061(数学)
- LCD液晶屏工作原理
- ListView显示数据,给关键词添加红色高亮显示。
- Android运行main方法后java虚拟机停止运行
- UVa 1146—ID Codes
- 安卓学习笔记----浅学Menu
- Oracle日期格式化
- db2不同路径还原问题 SQLSTATE=57019 SQL1051N
- 双系统Linux下突然挂载Windows分区失败