BZOJ 3000 Big Number 数学算法

题目大意:求n!在k进制下的位数

Stirling公式:

数据范围小就暴力,数据范围大套用Stirling公式

注意先利用log来避免数字过大而失精 最后答案要开long long

#include <cmath>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
const double pi=acos(-1.0),e=exp(1.0);
int n,k;
int main()
{
	int i;
	while(~scanf("%d%d",&n,&k) )
	{
		if(n<=100)
		{
			double temp=0;
			for(i=2;i<=n;i++)
				temp+=log(i);
			temp/=log(k);
			cout<<(long long)floor(temp+1e-7)+1ll<<endl;
		}
		else
		{
			double temp=log(2*pi*n)/log(k)/2+n*log(n/e)/log(k);
			cout<<(long long)floor(temp+1e-7)+1ll<<endl;
		}
	}
	return 0;
}
时间: 2024-10-07 15:27:17

BZOJ 3000 Big Number 数学算法的相关文章

BZOJ 3000: Big Number (数学)

题目: https://www.lydsy.com/JudgeOnline/problem.php?id=3000 题解: 首先n很大,O(n)跑不过,那么就要用一些高端 而且没听过 的东西——stirling公式 shirling公式:   n!≍√(2πn)*(n/e)^n 这个公式对于n很大的解还是有很高的准确度的,但是对于n比较小的情况就会有误差. 所以对于n很小就暴力. 注意用log的一堆公式: lg(a*b)=lg(a)+lg(b):lg(a/b)=lg(a)-lg(b); lg (

BZOJ 2508 简单题 数学算法

题目大意:维护一个平面,支持三种操作: 0.加入一条直线(给的是两点式) 1.删除一条直线 2.询问到所有直线距离平方和最小的点 题解见 http://blog.sina.com.cn/s/blog_ab8386bc0101i1nj.html 我只是贴代码供参考的- - 注意我的abcdef和题解设的不一样- - 这简单题WA了两页- - #include <cmath> #include <cstdio> #include <cstring> #include <

BZOJ 3000(Big Number-Stirling公式求n!近似值)

3000: Big Number Time Limit: 2 Sec  Memory Limit: 128 MB Submit: 220  Solved: 62 [Submit][Status] Description 给你两个整数N和K,要求你输出N!的K进制的位数. Input 有多组输入数据,每组输入数据各一行,每行两个数--N,K Output 每行一个数为输出结果. Sample Input 2 5 2 10 10 10 100 200 Sample Output 1 1 7 69 对

HDU 4937 Lucky Number (数学,进制转换)

题目 参考自博客:http://blog.csdn.net/a601025382s/article/details/38517783 //string &replace(iterator first0, iterator last0,const_iterator first, const_iterator last); //把[first0,last0)之间的部分替换成[first,last)之间的字符串 /* 题意: 我们将3,4,5,6认为是幸运数字.给定一个十进制数n. 现在可以讲起任意转

HDU 1018 Big Number 数学题解

Problem 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

BZOJ 2876 NOI2012 骑行川藏 二分+数学算法

题目大意:给定n段路,每段长度为si,如果在这段路上以vi的速度匀速行驶,那么消耗的体力为ki*(vi-v'i)^2*si,求在不超过体力上限情况下的最大速度 我去年买了个表- - 去网上百度了半天一元三次方程的求根公式才发现函数是递增的- - 百度百科写的什么NM破玩应- - 好像没讲明白- - MS只要知道拉格朗日乘数法就能差不多搞懂这道题了- - #include <cstdio> #include <cstring> #include <iostream> #i

BZOJ 2048 2009国家集训队 书堆 数学算法

题目大意:经典的物理上的桌边堆书问题,初中物理老师曾经还讲过,不过只记住了结论...没关系,简单证明一下就好 首先我们设由上至下第i本书比它下面那本书多伸出去的长度为a[i],前缀和为s[i],那么我们要求的就是s[n] 为了简化问题我们设一本书的长度为1 假设n=1 a[1]=1/2,毫无疑义 然后考虑两本书 两本书的时候,重心明显在距下面那本书左端点的3/4处,故a[2]=1-3/4=1/4 好的我知道了!第一本是1/2,第二本是1/4,那么第三本就是1/8! 这样想的同学都只过了样例. 我

【BZOJ 2326】 [HNOI2011]数学作业

2326: [HNOI2011]数学作业 Time Limit: 10 Sec  Memory Limit: 128 MB Submit: 1100  Solved: 625 [Submit][Status] Description 矩阵乘法. 可以用类似于秦九韶算法,把被取模的数拆开. 如123%m=(((1%m)*10+2)%m*10+3)%m 我们发现对于位数相同的数的计算方法是一样的,想到矩阵乘法. 对于1位的数: matrix x=10^1  0  0 1       1  0 0  

HDU 1711 Number Sequence(算法验证)

该怎么做.每一个人的人生都应该自己掌握.你给不了别人一切.你也不懂别人的忧伤. 微笑不代表快乐.哭泣不一定悲伤 不努力怎么让关心你的人幸福.不努力怎么让看不起你的人绝望. 我用生命在奋斗--lx_Zz ------------------------------------------------------------- -------------------------    华丽的切割线    ---------------------------- -------------------