自然數形式系統的實驗2

2021-05-24 22:17:41 字數 1207 閱讀 6785

(setq  zero  (lambda (s z) z))

(setq  one  (lambda (s z) (funcall  s z) ))

(setq  two  (lambda (s z) (funcall s (funcall  s z) )))

(setq  three  (lambda (s z) (funcall s (funcall s (funcall  s z) ))))

(setq  four  (lambda (s z)(funcall s (funcall s (funcall s (funcall  s z) )))))

(setq  five  (lambda (s z)(funcall s (funcall s (funcall s (funcall s (funcall  s z) ))))))

(defun chenbing (value)

(list  'chenbing value)

(funcall one 'chenbing nil)

(funcall two 'chenbing nil)

(funcall three 'chenbing nil)

(defun  myif (con then else)

(funcall con then else)

(defun true (u v)

u(defun false (u v)

v(defun wrap (f)

(lambda (n)

(cons 'false  (myif (car n) (cdr n) (funcall f (cdr n) ) ) )

(defun  subone (n)

(lambda (s z)

(cdr  (funcall n (wrap s ) (cons 'true z) ))

(setq  test (subone five) )

(funcall test 'chenbing nil)

(defun  iszero (n)

(funcall n  (lambda(x) 'false) 'true)

(defun  sum  (n)

(myif  (iszero  n)  one  (sum  (subone  n) ) )

(setq result (sum  zero) )

(funcall  result  'chenbing  nil)

連續的自然數相加

正整數中有些數字是可以由連續的自然數相加而得,比如 1 2 3 4 5 9 2 3 4 9 這裡再列出它的三個問題 1 寫乙個程式,對於任意64位正整數,輸出它所有可能的連續自然數之和的算式?2 怎麼樣的數字是不能由連續的自然數相加而得,並且證明?3 64位正整數範圍內子串行數目最多的數是哪乙個?能...

自然數的拆分問題

任何乙個大於1的自然數n,總可以拆分成若干個小於n的自然數之和。現在給你乙個自然數n,要求你求出n的拆分成一些數字的和。每個拆分後的序列中的數字從小到大排序。然後你需要輸出這些序列,其中字典序小的序列需要優先輸出。一本通的題 include include include using namespa...

2019 9 27 自然數的拆分

題目描述 給定乙個自然數n,要求把n拆分成若干個正整數相加的形式,參與加法運算的數可以重複。求拆分的方案數mod 2147483648的結果。1 n 4000。輸入乙個整數n。輸出輸出乙個數,即所有方案數 因為這個數可能非常大,所以你只要輸出這個數 mod 2147483648 的餘數即可。樣例輸入...