uva 10061(数学)
数学 UVa
2023-09-11 14:14:10 时间
题解:题目要在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; }
相关文章
- LeetCode-1247. 交换字符使得字符串相同【贪心,数学】
- 【数学建模绘图系列教程】绘图模板总结
- 数学建模番外篇5:优秀论文插图整理&分析(2019年)
- 【原创】开源Math.NET基础数学类库使用(16)C#计算矩阵秩
- 【原创】开源Math.NET基础数学类库使用(13)C#实现其他随机数生成器
- 考研:研究生考试(十五天学完)之研究生学霸重点知识点总结之考研必知(考研时间/科目/必备物件)、【考研政治】/【考研英语】/【考研数学】经验总结(历年规律分析、技巧总结、经验分享)
- 程序员数学基础【三、取模运算(取余运算功能重叠部分)】(Python版本)
- 数学建模学习(36):层次分析法(AHP)完整讲解
- 剑指 Offer 10- II. 青蛙跳台阶问题 -递归法和数学递推法
- 数学中的复数是什么?
- Python小白的数学建模课-B3. 新冠疫情 SIS模型
- 【随机过程】作业 3 数学期望
- 【数学建模】8 非线性规划及例题讲解
- 【2022 年“SPSSPRO 杯”数学中国数学建模网络挑战赛】A题 人员的紧急疏散-第二阶段23页论文
- 小学数学四年级上期练习题 - 证明五角星五个顶角之和等于 180 度
- 数学建模——运输问题(Python实现)