正整數 m, n 如何取值使得 m n pi n 2 的絕對值最小?

時間 2021-05-09 17:27:36

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,使得每個正整數都可以唯一表示成S中兩個數的差?

可以的。我們可以遞推的構造。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 中兩個數差的集合。...

能否在圓周上放置2011個正整數,使得任意兩個相鄰數之比等於乙個素數或乙個素數的倒數。

帥帥的機器貓 結論是 不可以.反設可以 設這 個數為 並且規定 那麼設 就有並且由於反設知道 要麼是素數要麼就是素數的倒數,設 就這樣分成 與 其中字母都是素數 所以代入上面的式子知道 由算數基本定理知道 但是 所以矛盾.於是不能這樣放正整數. 好奇的小豬 設Rn是素數或者素數的倒數,圓周選取任意乙...

n n 1的取值範圍怎麼求啊 n取正整數 ?

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 無限趨近於...