烏拉姆數列

烏拉姆數列

烏拉姆數列是由烏拉姆在1964年提出的。數列的首兩項U1和U2定義為1和2,對於n>2,Un為最小而又能剛好以一種方法表達成之前其中兩個相異項的和。例如3=1+2,故U3=3;4=1+3(注意2+2不計算在內),故U4=4;5=2+3=1+4,所以它不在數列內。首幾項是1, 2, 3, 4, 6, 8, 11, 13, 16, 18, 26, 28, 36, 38, 47, 48, 53, 57, 62, 69, 72, 77, 82, 87, 97, 99... (OEIS:A002858)

基本介紹

  • 中文名:烏拉姆數列
  • 提出時間1964年
  • 提出者:烏拉姆
  • 套用學科:數學
概念,程式,證明,

概念

烏拉姆數列是由烏拉姆在1964年提出的。數列的首兩項U1和U2定義為1和2,對於n>2,Un為最小而又能剛好以一種方法表達成之前其中兩個相異項的和。例如3=1+2,故U3=3;4=1+3(注意2+2不計算在內),故U4=4;5=2+3=1+4,所以它不在數列內。首幾項是1, 2, 3, 4, 6, 8, 11, 13, 16, 18, 26, 28, 36, 38, 47, 48, 53, 57, 62, 69, 72, 77, 82, 87, 97, 99... (OEIS:A002858)
烏拉姆猜想這個數列密度為0,但它似乎約為0.07396。這是個數學上的未解決問題。
前幾項既為烏拉姆數又為素數的數組成數列為
2, 3, 11, 13, 47, 53, 97, 131, 197, 241, 409, 431, 607, 673, 739, 751, 983, 991, 1103, 1433, 1489 (A068820)

程式

以下為尋找1000下烏拉姆數程式
ulam_i = [1,2,3]ulam_j = [1,2,3]
for cand in range(4,1000):
res = []
for i in ulam_i:
for j in ulam_j:
if i == j or j > i: pass
else: res.append(i+j)
if res.count(cand) == 1:
ulam_i.append(cand)
ulam_j.append(cand)
print ulam_i

證明

設 有 無 限 多 個 Ulam 數,且 其 中 最 大 的 兩 個 為 un 和 un-1。
今 考 慮 A = un + un-1,顯 然 A > un 且 A 不 是 一 個 Ulam 數,
由 Ulam 數 的 定 義 得 知 A 可 以 由 多 於 一 個 方 式 以 兩 個 Ulam 數 之 和 來 表 示,
設 另 一 個 方 式 為 A = uj + uk ,且 n ³ j ³k,即 A = un + un-1 = uj + uk,
若 n = j,則 n-1 = k,由 此 與 A = uj + uk 為 另 一 個 表 示 方 式 之 假 設 矛 盾。
若 n > j,則 n-1 ³k,uj 和 uk 不 是 最 大 的 兩 個 Ulam 數
所 以,un + un-1 > uj + uk,由 此 產 生 矛 盾。由 反 證 法,得 出 結 論 "有 無 限 多 個 Ulam 數"。

相關詞條

熱門詞條

聯絡我們