【斯特林公式】N!的k进制位数

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

题目描述

我们知道n!=n*(n-1)*(n-2)*…*2*1。

那么给定一个n,n!是几位数呢。

更困难的,n!的k进制数有多少位呢。

输入

第一行是一个数T(1≤T≤50000),代表T组测试数据。

每一组测试数据占一行,有两个整数n(0 ≤ n ≤ 10^6),k(2≤k≤1000)。

输出

对于每组测试数据,输出n!k进制数的位数。

样例输入

2
3 10
3 2

样例输出

1
3
最后除以log(k)
#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
#include<cmath>
const double Pi=acos(-1.0);
const double e=exp(1.0);
/*斯特林公式N!=sqrt(2*Pi*N)*(N/e)N次方,Pi=acos(-1.0) e=exp( -1.0 )*/
int main(){
int t;
scanf("%d",&t);
double n,k;
while(t--){
	scanf("%lf%lf",&n,&k);
	if(n==0||n==1)
	printf("1\n");
	else if(n==2&&k==2)
    printf("2\n");
	else
	printf("%.0lf\n",floor((log(sqrt(2*1.0*Pi*n))+n*log(n*1.0/e))/(log(k)))+1);
}
	return 0;
} 

数值积分——牛顿-科特斯公式 在整个区间应用一次牛顿-斯科特公式精度较低,常用的方法是将a~b积分区间分成很多小区间,在每个小区间上应用牛顿-斯科特公式,称为复合斯科特公式。关于积分的基础知识,本文不再赘述。辛普森法则(辛普森1/3法则(二次多项式)、辛普森3/8法则(三次多项式));可使用复合梯形法则/复合辛普森法则,但无法得出最后的公式,而是通过循环在每一个小区间进行积分。此函数用于计算累积积分,z为向量,其元素z(k)是从x(1)到x(k)的积分值。一般将辛普森1/3法则和辛普森3/8法则结合使用以应对奇数个区间的情况。 阅读详情

相关推荐

公式求k进制下整数的位数

k进制下整数n的位数为:⌊logkn⌋+1\lfloor log_kn \rfloor + 1⌊logk​n⌋+1 证明: 如果整数n在k进制下有x位,那么一定有kx−1≤n<kxk^{x-1}\le n < k^xkx−1≤n<kx 所以有x−1≤logknx-1 \le log_k{n}x−1≤logk​n,与x>logknx > log_k{n}x>logk​n 即logkn<x≤logkn+1log_kn<x\le log_kn+1logk​n<

君义NOIP的博客 584

1117:K-进制

题目:考虑包含N位数字的K-进制数. 定义一个数有效, 如果其K-进制表示不包含两连续的0. 例: 1010230 是有效的7位数 1000198 无效 0001235 不是7位数, 而是4位数. 给定两个数N和K, 要求计算包含N位数字的有效K-进制数的总数. 假设2 <= K <= 10; 2 <= N; 4 <= N+K <= 18. 输入:两个十进制整数:N和K 输出:十进制表示的结果 样例输入: 2 10 样例输出: 90 思路: 对于n

dlz_yhn的博客 348

牛顿—柯特斯(Newton-Cotes)求积公式

看此博文需要首先知道插值型求积公式,见博文:插值型求积公式看插值型求积公式,又需要看拉格朗日插值法,见博文:拉格朗日插值法......————————————————————————————————————————————————————————————————————————————————————————————————————————常见的Newton-Cotes公式:———————————...

Reborn Lee 2万+

牛顿斯科特MATLAB求积分,Newton—Cotes积分公式的matlab实现与数值算例

Newton—Cotes积分公式的matlab实现与数值算例【摘要】Newton-Cotes积分公式在数值计算定积分中起着重要作用,主要研究其matlab实现以及数值算例,并通过图说明等分区间的份数n≥8时Newton-Cotes积分公式是不稳定的。【关键词】Newton-Cotes积分公式;matlab;稳定性1 Newton-Cotes数值积分公式的matlab实现Newton-Cotes数值...

weixin_42142062的博客 6462

bzoj 3000 Big Number 估算n!在k进制下的位数 斯特林公式

题目大意 求n!在k进制下的位数 2≤N≤2^31, 2≤K≤200 分析 作为数学没学好的傻嗨,我们先回顾一下log函数 \(\log_a(b)=\frac 1 {log_b(a)}\) \(\log_a (x^k)=k*\log_a x\) \(\log_a(bc)=log_a(b)+log_a(c)\) 嗯嗯,呵呵 我们要求的是\(log_k(n!)\) n大处理不了 用斯特林公式 \(n!...

weixin_30256901的博客 126

N!的k进制位数 【打表】or【斯特林公式

N!位数 Time Limit:1000MS Memory Limit:131072KB 64bit IO Format:%lld &amp; %llu Submit Status Description 我们知道n!=n*(n-1)(n-2)…*2*1。 那么给定一个n,n!是几位数呢。 更困难的,n!的k进制数有多少位呢。 Input 第一行是一个数T(1≤...

lzs_lazy 762

LightOJ - 1045 求N!在k进制下的的位数斯特林公式

题意:求n的阶乘k进制下的位数。题解:斯特林公式可以求N!在k进制下的的位数。#include&lt;cstdio&gt; #include&lt;iostream&gt; #include&lt;cmath&gt; using namespace std; double pi =acos(-1.0);//π double e =exp(1);//e int t; ...

阿狸的博客 358

【bzoj3000】Big Number 【斯特林公式

题意:给你两个整数N和K,要求你输出N!的K进制位数。 题解:首先补了一下对数的运算法则。 1.loga(mn)=loga(m)+loga(n)loga(mn)=loga(m)+loga(n)log_a(mn)=log_a(m)+log_a(n) 2.loga(mn)=loga(m)−loga(n)loga(mn)=loga(m)−loga(n)log_a(\frac{m}{n})=log...

2016gdgzoi471 758

SDUT 3503 有两个正整数,求N!的K进制位数

有两个正整数,求N!的K进制位数 题目链接:http://sdutacm.org/sdutoj/problem.php?action=showproblem&problemid=3503 #include <bits/stdc++.h> using namespace std; const double eps = 1e-6; const doubl...

weixin_30627381的博客 98

bzoj3000 Big Number 数论,斯特林公式

Description 给你两个整数N和K,要求你输出N!的K进制位数。 Input 有多组输入数据,每组输入数据各一行,每行两个数——N,K Output 每行一个数为输出结果 Sample Input 2 52 1010 10100 200 Sample Output 11769对于100%的数据,有2≤N≤2^31, 2≤K≤200,数据组数T≤200。 题解 用St...

weixin_30430169的博客 199

【bzoj3000】Big Number 数学

Description给你两个整数N和K,要求你输出N!的K进制位数。Input有多组输入数据,每组输入数据各一行,每行两个数——N,KOutput每行一个数为输出结果Sample Input2 5 2 10 10 10 100 200Sample Output1 1 7 69 对于100%的数据,有2≤N≤2^31, 2≤K≤200,数据组数T≤200。Hint题意题解:斯特林公式

xinxiaxindong的博客 406

斯特林公式近似求阶乘的位数

题目来源:https://www.nowcoder.net/acm/contest/75/A 这条公式不可以直接用,有一个原因: 我写了一个程序去测试斯特林公式(其实它至少约等于)发现随着输入数的增大,用斯特林公式求出来的近似值误差越来越大。斯特林公式只是求一个近似值!! 所以两边取对数:log8(n!) 约等于 log8(斯特林公式),再次测试: log8(n!)随着n的...

pipitongkw1的博客 1665

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

求n!在k进制下的位数,n<=1e18 斯特林公式:$n!\approx \sqrt{2\pi n}(\frac{n}{e})^n$ 在n很大的时候有较好的精度保证。 $\log_{k}n!+1=\frac{1}{2}\frac{\ln(2\pi n)}{\ln k}+n\frac{\ln n-\ln e}{\ln k}+1$ n较小时直接暴力求解即可。 1 #in...

weixin_30252709的博客 72

3000: Big Number

题目链接题目大意:求出N!的K进制位数题解:给数学跪了。题解我的收获:Orz#include <cmath> #include <cstdio> #include <cstring> #include <iostream> #include <algorithm> using namespace std; const double pi=acos(-1.0),e=exp(1

蒟蒻的Bzoj记录 330

hdu 1018阶乘位数

求N!位数 因为前几天做了关于大数运算的学习,我也天真的以为这个题目是大数计算,后来才发现N<10^7,大数也没有办法了。 然而,这个题目只是求有多少位 N!=1·2·3·4·5·5·6·7···(n-1)·n 两边求对10的对数 log10(N!)=log(1·2·3·4·5·5·6·7···(n-1)·n) =log(1)+log(2)+log(3)+··

jmhIcoding 812

1091: N!的k进制位数 [数学]

1091: N!位数 [数学] 时间限制: 1 Sec 内存限制: 128 MB 题目描述 我们知道n!=n*(n-1)*(n-2)*…*2*1。 那么给定一个n,n!是几位数呢。 更困难的,n!的k进制数有多少位呢。 输入 第一行是一个数T(1≤T≤50000),代表T组测试数据。 每一组测试数据占一行,有两个整数n(0 ≤ n ≤ 10^6

王小二的博客 734

算法题(斯特林公式求N的阶乘,在B进制下的位数

题目 样例 解题思路 1、 这道题是ACM题,有点难度,需要运用数学知识,k进制下的n的阶乘的位数=logk(n)=log10(n)/(log10(k)),a先保持浮点类型的,最后结果再上取整,下面直接给出代码。 参考代码 package Test; import java.util.Scanner; public class h { public static void main(St...

悲伤的小霉的博客 402
上一篇: 【牛客网】bfs广度搜索
下一篇: 985因子对难题
idealistic
博客等级 码龄10年 97粉丝 395原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值