求大数的阶乘的位数:PKU :1423:Big Number

2023-05-16

题目描述:

Description

In many applications very large integers numbers are required. Some of these applications are using keys for secure transmission of data, encryption, etc. In this problem you are given a number, you have to determine the number of digits in the factorial of the number.

Input

Input consists of several lines of integer numbers. The first line contains an integer n, which is the number of cases to be tested, followed by n lines, one integer 1 <= m <= 10^7 on each line.

Output

The output contains the number of digits in the factorial of the integers appearing in the input.

Sample Input


2
10
20  

Sample Output


7
19  

分析:输入n个数,每个数m都可能很大,要求输出m!的位数,比如说10!=2628800,那么输出就是7。  

解法一(该方法在PKU上会TLE,原因是其复杂度为o(n) ):  

由于n!=n*(n-1)*……*2*1 = 10^dn * 10^dn-1 *……* 10^di*……10^d0 = 10^(dn+dn-1+……+d0);其中:dn = log10(n),dn-1 = log10(n-1)……  

因此,n!的位数其实就是dn+……+di+……+d0;因此可以得到如下代码:  

#include "iostream"
#include "cmath"
using namespace std;

int main(int argc, char* argv[])
{
 int N;
 int Num;
 cin>>N;
 double d  ;
 for (int i =0;i<N;i++)
 {
  cin>>Num;
  d =1;
  for (int j=2;j<=Num;j++)
  {
   d +=log10(j);
  }
  cout<<(int)d<<endl;
 }
 
 return 0;
}

解法二:stirling公式,复杂度O(1),PKU上通过  

假设n! = 10^d;其中d可能包含小数,但是d的整数部分就是n!的位数  

由stirling公式:n!~((n/e)^n )* (2* pi * n)^(1/2);则: d = log10(n!) = n*log10(n/e) + 0.5*log10(2*pi*n);于是得到如下代码:  


#include "iostream"
#include "cmath"
using namespace std;
const double pi = 3.1415926535898;
const double e = 2.718281828459;

int main(int argc, char* argv[])
{
 int N;
 int Num;
 cin>>N;
 for (int i =0;i<N;i++)
 {
  cin>>Num;
  cout<<(int)(Num*log10(Num / e) + 0.5*log10(2*pi*Num)) +1<<endl;
 }
 
 return 0;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

求大数的阶乘的位数:PKU :1423:Big Number 的相关文章

随机推荐

  • 管道过滤器(Pipe-And-Filter)模式(出处:http://bj007.blog.51cto.com/1701577/345677)

    按照 POSA 面向模式的软件架构 里的说法 xff0c 管道过滤器 xff08 Pipe And Filter xff09 应该属于架构模式 xff0c 因为它通常决定了一个系统的基本架构 管道过滤器和生产流水线类似 xff0c 在生产流
  • 数据库架构的演变

    最近看了很多公司架构的演变的文章 xff0c 发现其中的基本思路和架构演变都很类似 xff0c 这里也总结一下数据库架构的演变以及演变背后的思路 单主机 最开始网站一般都是由典型的LAMP架构演变而来的 xff0c 一般都是一台linux主
  • 如何下载Android源代码

    Android已经火了很长时间了 xff0c 虽然做手机开发也有两年了 xff0c 但是一直没有深入接触到Android 前些天想下载Android源代码来看看 xff0c 没想到http android git kernel org九月初
  • Web数据库

    http baike baidu com link url 61 Tib3flBuOBsLy4IoMAxXt2z36Ms77 mQe85MBq7kJh0XfG7oluhlEinX3Maomb2mboXIcedxDEWvGPIDtNQfxa
  • 大型网站系统架构的演化

    前言 一个成熟的大型网站 xff08 如淘宝 京东等 xff09 的系统架构并不是开始设计就具备完整的高性能 高可用 安全等特性 xff0c 它总是随着用户量的增加 xff0c 业务功能的扩展逐渐演变完善的 xff0c 在这个过程中 xff
  • 架构设计案例分析-高速公路收费运营管理平台

    本文旨在通过对某省高速公路联网收费运营管理平台的架构设计过程进行案例分析 xff0c 描述架构设计的决策过程 1 业务背景 某省的高速公路分为近百个路段 xff0c 不同的路段归属不同的公司建设与运营 xff0c 造成了车辆在跨越不同路段时
  • 图片服务架构演进

    现在几乎任何一个网站 Web App以及移动APP等应用都需要有图片展示的功能 xff0c 对于图片功能从下至上都是很重要的 必须要具有前瞻性的规划好图片服务器 xff0c 图片的上传和下载速度至关重要 xff0c 当然这并不是说一上来就搞
  • 应用系统架构设计

    我们在做着表面上看似是对于各种不同应用的开发 xff0c 其实背后所对应的架构设计都是相对稳定的 在一个好的架构下编程 xff0c 不仅对于开发人员是一件赏心悦目的事情 xff0c 更重要的是软件能够表现出一个健康的姿态 xff1b 而架构
  • 用三层架构与设计模式思想部署企业级数据库业务系统开发

    1 1关于架构 架构这个词从它的出现后 就有许许多多的程序员 架构师们激烈地讨论着它的发展 xff0c 但是架构一词的出现 xff0c 却是随着三层架构的出现才出现的 当然 xff0c 目前应用三层架构开发也正是业界最关注的主题 那么这里我
  • KickStart安装教程

    KickStart安装教程 PXE概念介绍 xff1a PXE技术与RPL技术不同之处为RPL是静态路由 xff0c PXE是动态路由 RPL是根据网卡上的ID号加上其他记录组成的一个Frame xff08 帧 xff09 向服务器发出请求
  • DHCP的基本实现原理

    DHCP是一个局域网的网络协议 xff0c 使用UDP协议工作 xff0c 主要有两个用途 xff1a 给内部网络或网络服务供应商自动分配IP地址 xff0c 给用户或者内部网络管理员作为对所有计算机作中央管理的手段 xff0c 在RFC
  • 详解Windows PE(Windows预安装环境)

    Windows PE Windows PreInstallation Environment Windows PE 直接从字面上翻译就是 Windows预安装环境 xff0c 微软在2002年7月22日发布 xff0c 它的原文解释是 xf
  • Kickstart的高级应用

    Pre 和Postinstall 脚本 kickstart本身提供了一些对系统的基本调整和设置 xff0c 例如设置root密码 xff0c 设置时区等等 但是它不能做某些更细致的调整 xff0c 比如通过chkconfig禁止某些服务 x
  • SMTP错误码/建议解决方法

    SMTP错误码 建议解决方法 错误总表 420 1 Timeout Communication Problem Encountered During Transmission Thie Is a Novell Groupwise Smtp
  • Kickstart+NFS+DHCP+TFTP+PXElinux实现CentOS的网络自动安装

    Linux Kickstart无人值守安装 一 基本原理 PXE Pre boot Execution Environment 是由Intel设计的协议 xff0c 它可以使计算机通过网络启动 协议分为client和server两端 xff
  • 流程制造行业信息系统 架构

    流程制造行业信息系统 架构 执笔人 xff1a 郑玉堂 一 流程制造业信息技术应用的重要性 经济全球化趋势已经给各国经济发展带来越来越深刻的影响 xff0c 各国制造企业在世界市场上进行着日益激烈和残酷的竞争 剧烈的和不可测的市场环境变化
  • OpenGL纹理映射的几个问题

    今天在绘制颜色表的时候 xff0c 出现两个小问题 xff1a 目的是根据一个特定的颜色表 xff0c 用图像方式将颜色表绘制出来 xff0c 根据给定的颜色表 xff0c 我应该绘制出如下的图像才对 xff1a 1 我的颜色表绘制出来的图
  • 将自己写的经常复用的类封装成dll/lib的方法

    如果你的工作长期与某个领域相关 xff0c 比如说长期做直接体绘制 DVR 方面的开发 xff0c 那么你可能经常使用自己的传递函数类 xff0c 如果每一个工程你都把传递函数类的 h和 cpp文件添加进去会比较麻烦 xff0c 其实 xf
  • 从体数据分割谈解决问题之方法

    从体数据分割谈解决问题之方法 一 艰辛历程 xff1a 由于最近在做基于分割信息的体数据可视化时需要得到体数据的分割信息 每个体素的标识数据 xff0c 标识了每个体素属于什么组织 xff0c 为了得到体数据的分割信息我费了不找周折 下面是
  • 求大数的阶乘的位数:PKU :1423:Big Number

    题目描述 xff1a Description In many applications very large integers numbers are required Some of these applications are usin