zoukankan      html  css  js  c++  java
  • uva 10061(数学)

    题解:题目要在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
    ", flag, len + 1);
    	}
    	return 0;
    }

  • 相关阅读:
    js笔记——js里var与变量提升
    微信授权机制
    HTML5的sessionStorage和localStorage
    博客园主题响应式布局
    [转]五种开源协议的比较(BSD,Apache,GPL,LGPL,MIT)
    搭建jekyll博客
    Oracle VM VirtualBox技巧
    jQuery实现全选、全不选、反选
    js里slice,substr和substring的区别
    js里cookie操作
  • 原文地址:https://www.cnblogs.com/cxchanpin/p/6933854.html
Copyright © 2011-2022 走看看