请输入您要查询的百科知识:

 

词条 n!
释义

阶乘符号

n!=1x2x3...xn

1751年,欧拉以大写字母M表示m阶乘 M=1x2x3...x...m

1799年,鲁非尼在他出版的方程论著述中,则以小写字母π表示m阶乘,而在1813年,高斯则以Π(n)来表示n阶乘。而用来表示n阶乘的方法起源于英国,但仍未能确定始创人是谁。直至1827年,由于雅莱特的建议而得到流行,现在有时也会以这个符号作为阶乘符号。

而最先提出阶乘符号n!的人是克拉姆(1808),后来经过欧姆等人的提倡而流行,直至现在仍然通用。

HDU 上与N!相关的两个题目:

Leftmost Digit:

题意:给一个正整数N(1<=N<=1,000,000,000),输出N^N最左边的数字.

N=3时,3 * 3 * 3 = 27, 最左边的数字是 2.

N=4时,4 * 4 * 4 * 4 = 256, 最左边的数字是 2.

思路:N^N是一个整数,可以表示成一个小数乘以10^(k-1),即N^N=frist.xxxxx*10^(k-1).

frist.xxxxx=N^N/10^(k-1)=10^(log_10(N^N-(k-1))).对于10的整数次幂frist=1,所以当log_10(N^N-(k-1))中存在小数时,frist=(int)1*pow(10,小数部分)!

小数部分=log_10(N^N-(k-1))-(long long)(log_10(N^N-(k-1)));

公式:frist =(int)pow(10.0, (n*log10(n) – (long long)(n*log10(n))))

Last non-zero Digit in N!

题意:给一个正整数N(N为大整数),输出最右边非零的数字.代码:01 //大整数以string的形式传入

02 int Last_nonzero_Digit_in_N(string str){

03 int mod[20] = {1, 1, 2, 6, 4, 2, 2, 4, 2, 8, 4, 4, 8, 4, 6, 8, 8, 6,8, 2};

04 int a[1000];

05 int i, c, t=1, len=str.length();

06 for (i = 0; i < len; i++)

07 a[i] = str[len - 1 - i] - ’0′;

08 while (len) {

09 len -= !a[len - 1];

10 t = t * mod[a[1] % 2 * 10 + a[0]] % 10;

11 for (c = 0, i = len - 1; i >= 0; i–)

12 c = c * 10 + a[i], a[i] = c / 5, c %= 5;

13 }

14 return t;

15 }

随便看

 

百科全书收录4421916条中文百科知识,基本涵盖了大多数领域的百科知识,是一部内容开放、自由的电子版百科全书。

 

Copyright © 2004-2023 Cnenc.net All Rights Reserved
更新时间:2025/2/7 21:31:46