免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: emacsnw
打印 上一主题 下一主题

[算法] 一道趣味算法题(数学题,可以编程求解)。 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2007-05-03 13:36 |只看该作者
原帖由 局外人 于 2007-5-2 18:12 发表
n^1000000 如果有 d 个十进制位, 则 n^1000000/10^(d-4)  的整数部分就是前 4 位

用 log 和 pow 计算 d 和上面的这个值就可以了.


不错不错
原题的答案是1000001,它的1000000次方的前4位是2718,用数学方法就可以推出来的,呵呵。
不过楼上的代码求解很漂亮,赞一个。

论坛徽章:
0
12 [报告]
发表于 2007-05-03 13:41 |只看该作者
原帖由 emacsnw 于 2007-5-3 13:36 发表


不错不错
原题的答案是1000001,它的1000000次方的前4位是2718,用数学方法就可以推出来的,呵呵。
不过楼上的代码求解很漂亮,赞一个。


You mean it could be done through mathematical induction. Would you like to show how?

论坛徽章:
0
13 [报告]
发表于 2007-05-03 14:13 |只看该作者
原帖由 局外人 于 5/3/07 10:08 发表
用 log 和 pow

[code]
#include <stdio.h>
#include <stdlib.h>
#include <math.h>


int
main (int argc, char **argv)
{
        unsigned long digits;
       
        double N, M, r;
        unsign ...


就差误差分析了, 把判定问题交给浮点数总是不怎么让人放心

论坛徽章:
0
14 [报告]
发表于 2007-05-03 14:17 |只看该作者
原帖由 bGFuZ3Vl 于 5/3/07 13:41 发表


You mean it could be done through mathematical induction. Would you like to show how?


Represent (1000000 + 1)^1000000 in binomial series may help. I think.

论坛徽章:
0
15 [报告]
发表于 2007-05-03 14:30 |只看该作者
原帖由 bGFuZ3Vl 于 2007-5-2 21:41 发表


You mean it could be done through mathematical induction. Would you like to show how?



我们知道自然对数的底数 e = lim_{n\to \infty}(1+1/n)^n
令 n = 1000000,那么1000001^1000000 = (n(1+1/n))^n=n^n(1+1/n)^n
n^n就是(10^6)^1000000,贡献了后面一大把0,因此头四位是由(1+1/n)^n决定的,分析一下e的泰勒展开式就知道(1+1/n)^n和e之间的误差小到可以忽略,因此这个数字的头几位应该是2.71828...

[ 本帖最后由 emacsnw 于 2007-5-2 23:13 编辑 ]

论坛徽章:
0
16 [报告]
发表于 2007-05-03 14:32 |只看该作者
原帖由 ArXoR 于 2007-5-2 22:13 发表


就差误差分析了, 把判定问题交给浮点数总是不怎么让人放心


确实需要误差分析,不过这里问题不大,毕竟只要十进制的头4位数字,log后再exp或者pow求回来的数值应该是在误差允许的范围内的。

论坛徽章:
0
17 [报告]
发表于 2007-05-03 15:09 |只看该作者
原帖由 emacsnw 于 2007-5-3 14:30 发表



我们知道自然对数的底数 e = lim_{n\to \infty}(1+1/n)^n
令 n = 1000000,那么1000001^1000000 = (n(1+1/n))^n=n^n(1+1/n)^n
n^n就是(10^6)^1000000,贡献了后面一大把0,因此头四位是由(1+1/n)^n决定的 ...


这个做法很狡猾啊,单从题目看,不大容易走上这条路。你要不说,我都不知道 e 的前 4 位是不同的,


e 约为:

2.718281828459045235360287471

1000001^1000000 约为:

2.718280469319376883819717579 E6000000

前 6 位是一样的

[ 本帖最后由 局外人 于 2007-5-3 15:12 编辑 ]

论坛徽章:
0
18 [报告]
发表于 2007-05-03 18:12 |只看该作者
看不懂,学习中
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP