亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

Chinaunix

標(biāo)題: 一道趣味算法題(數(shù)學(xué)題,可以編程求解)。 [打印本頁]

作者: emacsnw    時間: 2007-05-02 15:29
標(biāo)題: 一道趣味算法題(數(shù)學(xué)題,可以編程求解)。
選一個不超過一千萬的自然數(shù) n,使它的一百萬次方 (也就是說 n^1000000)的前四位各不相同。
作者: koolcoy    時間: 2007-05-02 18:29
是后四位就easy得多, 前四位有點(diǎn)麻煩.
作者: cjaizss    時間: 2007-05-02 20:49
so BT,誰出的題目?^_^
作者: yg    時間: 2007-05-02 21:04
只算4位應(yīng)該沒啥繁的,log一下就行了
作者: GKL    時間: 2007-05-02 21:18
提示: 作者被禁止或刪除 內(nèi)容自動屏蔽
作者: 局外人    時間: 2007-05-03 00:33
要列出全部解嗎?沒想到比窮搜更好的辦法。

12 就是一個解

12^1000000 ~ 1.762169275684230318197167758 E1079181


4 是最小解

4^1000000 ~ 9.802299377069567415894016537 E602059

[ 本帖最后由 局外人 于 2007-5-3 00:35 編輯 ]
作者: emacsnw    時間: 2007-05-03 04:00
原帖由 局外人 于 2007-5-2 08:33 發(fā)表
要列出全部解嗎?沒想到比窮搜更好的辦法。

12 就是一個解

12^1000000 ~ 1.762169275684230318197167758 E1079181


4 是最小解

4^1000000 ~ 9.802299377069567415894016537 E602059


你這幾個都是正確的,不知道你是如何求解?
作者: emacsnw    時間: 2007-05-03 04:03
原帖由 GKL 于 2007-5-2 05:18 發(fā)表
需要找出所有的解嗎?

窮舉估計得很長時間。。


只需要找出一個解即可,如果用數(shù)學(xué)方法當(dāng)然最好,編程的話加個要求,除了math.h里面的函數(shù),第三方的庫不能用,比如GMP.
作者: 局外人    時間: 2007-05-03 10:08
用 log 和 pow


  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <math.h>


  4. int
  5. main (int argc, char **argv)
  6. {
  7.         unsigned long digits;
  8.        
  9.         double N, M, r;
  10.         unsigned long m = 1000000UL;

  11.         N=4;
  12.         M= log(N)*1000000/log(10);
  13.         r=pow(10, M-ceil(M)+4);       
  14.         printf ("%e\n", r);
  15. }
復(fù)制代碼


  1. 9.802299e+03
復(fù)制代碼

[ 本帖最后由 局外人 于 2007-5-3 10:13 編輯 ]
作者: 局外人    時間: 2007-05-03 10:12
n^1000000 如果有 d 個十進(jìn)制位, 則 n^1000000/10^(d-4)  的整數(shù)部分就是前 4 位

用 log 和 pow 計算 d 和上面的這個值就可以了.

[ 本帖最后由 局外人 于 2007-5-3 10:14 編輯 ]
作者: emacsnw    時間: 2007-05-03 13:36
原帖由 局外人 于 2007-5-2 18:12 發(fā)表
n^1000000 如果有 d 個十進(jìn)制位, 則 n^1000000/10^(d-4)  的整數(shù)部分就是前 4 位

用 log 和 pow 計算 d 和上面的這個值就可以了.


不錯不錯
原題的答案是1000001,它的1000000次方的前4位是2718,用數(shù)學(xué)方法就可以推出來的,呵呵。
不過樓上的代碼求解很漂亮,贊一個。
作者: bGFuZ3Vl    時間: 2007-05-03 13:41
原帖由 emacsnw 于 2007-5-3 13:36 發(fā)表


不錯不錯
原題的答案是1000001,它的1000000次方的前4位是2718,用數(shù)學(xué)方法就可以推出來的,呵呵。
不過樓上的代碼求解很漂亮,贊一個。


You mean it could be done through mathematical induction. Would you like to show how?
作者: ArXoR    時間: 2007-05-03 14:13
原帖由 局外人 于 5/3/07 10:08 發(fā)表
用 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 ...


就差誤差分析了, 把判定問題交給浮點(diǎn)數(shù)總是不怎么讓人放心
作者: ArXoR    時間: 2007-05-03 14:17
原帖由 bGFuZ3Vl 于 5/3/07 13:41 發(fā)表


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.
作者: emacsnw    時間: 2007-05-03 14:30
原帖由 bGFuZ3Vl 于 2007-5-2 21:41 發(fā)表


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



我們知道自然對數(shù)的底數(shù) 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,貢獻(xiàn)了后面一大把0,因此頭四位是由(1+1/n)^n決定的,分析一下e的泰勒展開式就知道(1+1/n)^n和e之間的誤差小到可以忽略,因此這個數(shù)字的頭幾位應(yīng)該是2.71828...

[ 本帖最后由 emacsnw 于 2007-5-2 23:13 編輯 ]
作者: emacsnw    時間: 2007-05-03 14:32
原帖由 ArXoR 于 2007-5-2 22:13 發(fā)表


就差誤差分析了, 把判定問題交給浮點(diǎn)數(shù)總是不怎么讓人放心


確實(shí)需要誤差分析,不過這里問題不大,畢竟只要十進(jìn)制的頭4位數(shù)字,log后再exp或者pow求回來的數(shù)值應(yīng)該是在誤差允許的范圍內(nèi)的。
作者: 局外人    時間: 2007-05-03 15:09
原帖由 emacsnw 于 2007-5-3 14:30 發(fā)表



我們知道自然對數(shù)的底數(shù) 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,貢獻(xiàn)了后面一大把0,因此頭四位是由(1+1/n)^n決定的 ...


這個做法很狡猾啊,單從題目看,不大容易走上這條路。你要不說,我都不知道 e 的前 4 位是不同的,


e 約為:

2.718281828459045235360287471

1000001^1000000 約為:

2.718280469319376883819717579 E6000000

前 6 位是一樣的

[ 本帖最后由 局外人 于 2007-5-3 15:12 編輯 ]
作者: gta    時間: 2007-05-03 18:12
看不懂,學(xué)習(xí)中




歡迎光臨 Chinaunix (http://www.72891.cn/) Powered by Discuz! X3.2