题目描述

给你两个整数N和K,要求你输出N!的K进制的位数。

输入

有多组输入数据,每组输入数据各一行,每行两个数——N,K

输出

每行一个数为输出结果。

样例输入

2 5
2 10
10 10
100 200

样例输出

1
1
7
69


题解

数论

题目转化一下变为求$\lfloor\log_kn!\rfloor+1$,使用换底公式,问题转化为求$\log n$。

$n$有$2^31$之大,显然不能暴力去求。

这里需要用到Stirling公式:$n!\approx\sqrt{2\pi n}(\frac ne)^n$。这个公式在$n$较大时比较精确,因此可以直接套用;当$n$较小时精确度没有那么高,因此需要小范围暴力。

直接使用cmath中的函数对右半部分取对数即可(右半部分化简结果为$\frac 12\log 2\pi n$+n\log\frac ne),再除以$\log k$,下取整+1即为答案。

注意需要long long。

#include <cmath>
#include <cstdio>
const double pi = acos(-1) , e = exp(1);
int main()
{
int n , k , i;
while(~scanf("%d%d" , &n , &k))
{
if(n <= 100)
{
double ans = 0;
for(i = 1 ; i <= n ; i ++ ) ans += log(i);
printf("%d\n" , (int)floor(ans / log(k)) + 1);
}
else printf("%lld\n" , (long long)floor((log(2 * pi * n) / 2 + log(n / e) * n) / log(k)) + 1);
}
return 0;
}

【bzoj3000】Big Number 数论的更多相关文章

  1. bzoj3000 Big Number 数论,斯特林公式

    Description 给你两个整数N和K,要求你输出N!的K进制的位数. Input 有多组输入数据,每组输入数据各一行,每行两个数——N,K Output 每行一个数为输出结果 Sample In ...

  2. Leetcode 263 Ugly Number 数论 类似质因数分解

    Ugly Number的质因数仅为2,3,5 将输入的数分别除以2,3,5直到不能除,看是否为1,为1的是Ugly Number,其他则不是. class Solution { public: boo ...

  3. BZOJ3000 Big Number

    由Stirling公式: $$n! \approx \sqrt{2 \pi n} (\frac{n}{e})^n$$ 故:$$\begin{align} ans &= log_k n! + 1 ...

  4. [POJ3696]The Luckiest number(数论)

    题目:http://poj.org/problem?id=3696 题意:给你一个数字L,你要求出一个数N,使得N是L的倍数,且N的每位数都必须是8,输出N的位数(如果不存在输出0) 分析: 首先我们 ...

  5. Leetcode 9 Palindrome Number 数论

    判断一个数是否是回文数 方法是将数回转,看回转的数和原数是否相同 class Solution { public: bool isPalindrome(int x) { ) return false; ...

  6. [BZOJ3000] Big Number (Stirling公式)

    Description 给你两个整数N和K,要求你输出N!的K进制的位数. Input 有多组输入数据,每组输入数据各一行,每行两个数——N,K Output 每行一个数为输出结果. Sample I ...

  7. [BZOJ3000]Big Number(斯特林公式)

    求n!在k进制下的位数,n<=1e18 斯特林公式:$n!\approx \sqrt{2\pi n}(\frac{n}{e})^n$ 在n很大的时候有较好的精度保证. $\log_{k}n!+1 ...

  8. ACM在线模板

    转载自:https://blog.csdn.net/f_zyj/article/details/51594851 Index 分类细则 说起分类准则,我也是很头疼,毕竟对于很多算法,他并不是单调的,而 ...

  9. acm 模板

    Index 分类细则 说起分类准则,我也是很头疼,毕竟对于很多算法,他并不是单调的,而是多方面的都挂得上钩.所以,从始至终,分类准则一直都是我很纠结的问题. 经过思量,首先分出比较主流的几类:Numb ...

随机推荐

  1. LeetCode-环形链表II

    LeetCode-环形链表II 为找到入口点可以用以下方法 使用快慢指针法直到两个指针相遇 头节点处创建一个新的指针,并且向前移动,两个指针相遇处创建一个新的指针,并且向前移动,直到两个指针相遇为入口 ...

  2. Centos防火墙的配置

    Selinux的三种模式:enforcing,passive,disable 临时更改模式:setengorce 1|0        1:enforcing,   0:passive [root@C ...

  3. Configuration Alias

    第一个里程碑 ---- 查看系统别名 [root@xilong ~]# alias alias cp='cp -i' alias egrep='egrep --color=auto' alias fg ...

  4. C调用约定__cdecl、__stdcall、__fastcall、__pascal分析

    参考原文地址:https://www.cnblogs.com/yenyuloong/p/9626658.html C/C++ 中不同的函数调用规则会生成不同的机器代码,产生不同的微观效果,接下来让我们 ...

  5. Docker(三):部署软件

    Docker的镜像文件可以在镜像仓库中进行搜索. 部署软件目录导航: 常用命令 部署 Tomcat 部署 MySQL 部署 Oracle 常用命令 docker的常用命令如下: docker -v , ...

  6. PHP入门笔记--基础语法二

    一.函数 自定义函数 任何有效的 PHP 代码都有可能出现在函数内部,甚至包括其它函数和类定义. <?php function foo() { function bar() { echo &qu ...

  7. Hadoop(13)-MapReduce框架原理--Job提交源码和切片源码解析

    1.MapReduce的数据流 1) Input -> Mapper阶段 这一阶段的主要分工就是将文件切片和把文件转成K,V对 输入源是一个文件,经过InputFormat之后,到了Mapper ...

  8. POJ3687 反向拓扑排序

    Labeling Balls Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 16032   Accepted: 4713 D ...

  9. Python2 Sequence类型簇

  10. Java8新特性(一)——Lambda表达式与函数式接口

    一.Java8新特性概述 1.Lambda 表达式 2. 函数式接口 3. 方法引用与构造器引用 4. Stream API 5. 接口中的默认方法与静态方法 6. 新时间日期 API 7. 其他新特 ...