1樓:Yong YANG
Mathematica解千愁。程式寫的太急了,編的不好,算的有點慢。
error
=0.0004;$
MaxExtraPrecision
=1000000;K
=1000000;rr
=ContinuedFraction[Pi,K
];Max[rr
]Dynamic
[max
]pos=1
;For
[max
=23200
,max
<=Max[
rr],
++max
,While
[pos
<=K&&
rr[[
pos]]
<=max,
++pos];r
=FromContinuedFraction[Take[rr
,pos-1
]];m
=Numerator[r
];n=Denominator[r
];If[N
[Abs[m
*n-Pi
*n*n
],10
] ,Print[n ]];] 列幾組結果:記 1、 m=22; n=7; e=0.06195997410;2 、m=355;n =113;e =0.0034063119303、 m=\\ 809719544718248;n =\00\ 201564040715683;e =-0.002288738617;4 、n=\ \\01\ \\\\ \\\\ \\\\ \\\\ \\031432\\ \03663536\\ \770497;m =\\\ \\\\ \\\\ \\\\ \\\\ \\\00451\\ \\\\ 526;e= -0.0001208024650;5 、n=\ \\288111;m =\\\ 8002591;e =0.00004813056125;6 、n=\ \\\\ \\\\ \\\\ \\\\ \\\\ \\\\ \\\011\\ \0142\\ \\\\ \\05406\\ \\\\ \\\0202665\\ \\\\ \\\\ \\\\ \\\\ \\\\ \\\\ \\\\ \\\\ \\\\ \\\\ 041\\\ \04350\\ \041604\\ \\\04553350572460\\ \\\\ \\\\ \\\\ \\\\ \03\0417317\\ \\\\ \\\\ \\\\ \\\\ \\\\ \\0702232315\\ \\05003565\\ \\\\ \\\\ \\\07215\03 \\\\ \\\\ 0047\03 \\\\ \\\\ 032225\\ \\\\ \060260240105\\ \\\\ \\\\ \\\\ \\\\ 0337\\ 832338457917665806669332351323606;m =\\\ \\\\ \\\\ \\\051405\\ \\\\ \\\\ \\\\ \\\\ \\\\ \\\\ \\\\ \\\\ \\\\ \\\06 \\\\ \\\\ \\\\ \\\\ \\\\ \\\\ \\\\ \\\\ \\\\ \\\\ \\\\ \\\\ \\\\ \\\0040723\\ \014\\ \\\\ 06714\\ \\\\ \\\\ \\\\ \\\057732714\\ \\\\ \\\074\\ \\\\ \\\\ \\\\ \041\\ \\\\ \\\\ \\\\ \\\\ 0676\\ \\\\ \\\\ \0141\\ \\\\ \\\\ \\\\ \\\\ \219993019724224587564734765251457;e =0.00001271785737; 2樓: @Reinhardtl 給出了相關的理論,看上去這個值可以趨向0(但趨向0的速度大概很慢很慢) @mathe 大佬已經給出了演算法 這種問題送連分數會好很多。 利用mathe大佬的演算法,我們可以給出@bkfrd 給出的猜想的反例首先令m= n=如果你用Pari/GP \pb 4096 \\ 預設精度低,需要手工設定精度之後計算abs((Pi*n - m)*n) \\ 這裡算得的數字很難看,或許需要進一步print或者手工round才能得到結果 如果你用的是Mathematica N[(Pi*n - m)*n, 50] 兩款軟體給出了相同的計算結果: %3 = 4. E-5 0.這證明了 @bkfrd 的猜想有問題。 這個問題的演算法並不複雜 首先求Pi的連分數,用pari可以調精度之後直接contfrac(Pi)搞定 然後肉眼查詢連分數中比較大的數字 然後把那個數字之前的連分數算出來,得到的分子為m,分母為n,即為所求比如m=; n=;Block[, N[(m - n*Pi)*n, 50]]我們可以得到乙個絕對值更小的解 3樓: 構造二元函式 最笨的方法,挨個遍歷,在 double 的範圍內,可以找到乙個「區域性」的最小值; class Catdouble Fun( doublem, doublen) public :void Sol( double mMax ,double nMax ,FILE*fp )}}fprintf(fp ,"\nMin= F(%.0lf, %.0lf)\n= %.16lf\n" ,Ar[0 ],Ar[1 ],min );free(Ar );}};#include #include #include "Cat.h" intmain (int argc ,char **argv )Catca; doubleM= 0x10000 ;doubleN= 0x10000;ca .Sol(M ,N,fp );fclose(fp );printf ("Finished!\n" );scanf ("%*s" );return0; }這個函式,似乎沒有真正的「最小值」,好像只能讓他,無限接近0,但是沒法 = 0;因為他的值,永遠是無理數;double 的精度有限,只能精確到15位有效數字; 如果想用 近似圓周率的話,還不如用祖沖之的割圓術,那個更高效。 4樓:mathe 根據連分數理論,可以找到(m,n)使得上面誤差盡量小。 比如首先 的整數部分是3,可以寫成 然後計算可得 ,得 ,得到近似逼近 如此依次計算可得 ,其中每次得到的近似逼近都會讓上面的誤差更小 5樓:abcdeffa 根據問題的幾何意義,求 的最小值可轉換為求 的最小值,即我們要讓 盡量接近 。 若限定 ,則運用程式輔助求解可以在 的時間複雜度內解決問題。 6樓:bkfrd 猜想:特別地,心算易得上式對於 成立。 一般地,容易證明: 1. 互質; 2. ,向上取整或向下取整; 以 為橫座標,為縱座標作圖如下所示。 可以的。我們可以遞推的構造。S N 是乙個有限的正整數集合,T N 是S N中兩不同元素差組成的集合,滿足 1 S N中任何兩個元素差不同 2 T包含 但不包含N 1.因為S N有限,所以 T有限。存在正整數M 大於T中所有元素。記A為S N中最大的元素。令S S N 記T 為S 中兩個數差的集合。... 帥帥的機器貓 結論是 不可以.反設可以 設這 個數為 並且規定 那麼設 就有並且由於反設知道 要麼是素數要麼就是素數的倒數,設 就這樣分成 與 其中字母都是素數 所以代入上面的式子知道 由算數基本定理知道 但是 所以矛盾.於是不能這樣放正整數. 好奇的小豬 設Rn是素數或者素數的倒數,圓周選取任意乙... l m強 n n 1 n 1 1 n 1 1 1 n 1易證是關於n的增函式 最小值n 1原式為1 2 最大值趨向於1 1 2,1 未果 初等做法 分離常數法 n n 1 n 1 1 n 1 1 1 n 1 顯然它是遞增的。所以最小值在n 1時取得,為1 2 而隨著n無限增大,1 n 1 無限趨近於...是否存在乙個正整數集S,使得每個正整數都可以唯一表示成S中兩個數的差?
能否在圓周上放置2011個正整數,使得任意兩個相鄰數之比等於乙個素數或乙個素數的倒數。
n n 1的取值範圍怎麼求啊 n取正整數 ?