Scheme

素数のお勉強 4 - 約数の和

数学ガールを再読中デス。2章のミルカさんの宿題より。 正の整数nが与えられていたとき、nの約数の和を求めよ。 紙に書いて写経中。・・・アレ?なんで掛け算ナンダ。(a + b)(c + d) = a(c + d) + b(c + d) = ac + ad + bc + bdと。これが分配法則。中学くら…

Problem 17 - 数字を数えると

面倒な問題が残っていたので片付ける。Problem 17 - PukiWiki 1 から 5 までの数字を英単語で書けば one, two, three, four, five であり、全部で 3 + 3 + 4 + 4 + 5 = 19 の文字が使われている。では 1 から 1000 (one thousand) までの数字をすべて英単語…

Problem 2の解答例を読む

これはショックだ。Problem 2の解答例も読んでみる。問題は、 フィボナッチ数列の項は前の2つの項の和である。最初の2項を 1, 2 とすれば、最初の10項は以下の通りである。 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ...数列の項が400万を超えない範囲で、偶数の…

Problem 1の解答例を読む

Project EulerにProblem1の解答例がアップされていたので読んでみる。問題は、 10未満の自然数のうち、3 もしくは 5 の倍数になっているものは 3, 5, 6, 9 の4つがあり、これらの合計は 23 になる。同じようにして、1,000 未満の 3 か 5 の倍数になっている…

Problem 97 - シェルピンスキー数

最近、素数ばっかりだなProblem 97 - PukiWiki 100万桁を超える初めての素数は1999年に発見された. これはメルセンヌ素数であり, 2^6972593-1 である. 実際, 2,098,960桁ある. それ以降も, より多くの桁になるメルセンヌ素数 (2p-1の形の数) が他にも発見さ…

Problem 23 - 2つの過剰数の和

結構大変だった。Problem 23 - PukiWiki 完全数とは, その数の真の約数の和がそれ自身と一致する数のことである. たとえば, 28の真の約数の和は, 1 + 2 + 4 + 7 + 14 = 28であるので, 28は完全数である.真の約数の和がその数よりも少ないものを不足数といい,…

素数のお勉強 3 - 過剰数

過剰数を求めてみる。過剰数は、約数の総和が元の数の2倍より大きい数のことである。 (define (divisor n) (letrec ((iter (lambda (m) (cond ((> m n) '()) ((= (modulo n m) 0) (cons m (iter (+ m 1)))) (else (iter (+ m 1))))))) (iter 1))) (filter (l…

素数のお勉強 2 - 完全数

Problem 23 - PukiWikiがよくわからないので、ちょっと勉強中。 2進数で表すと、1111...1と並んでいる数の事をメルセンヌ数という。M_p=2^p - 1の形で表せる。メルセンヌ数のなかで、素数となるものをメルセンヌ素数という。pが素数であるとき、メルセンヌ素…

素数のお勉強

ちと予習しとこう。素数 - Wikipediaより。オイラーの発見した式、f(n) = n^2 + n + 41 は、n = 0, …, 39 において全て素数となる。 (length (filter prime? (list-tabulate 40 (lambda (n) (+ (* n n) n 41))))) ; 40 ホントダ。それ以上だと。 (length (fi…

Problem 35 - 循環素数

簡単そうなのからいくよ。Problem 35 - Project Euler The number, 197, is called a circular prime because all rotations of the digits: 197, 971, and 719, are themselves prime.There are thirteen such primes below 100: 2, 3, 5, 7, 11, 13, 17, 3…

call/ccに関する疑問

call/ccで使われなかった部分はどこに行ってしまうんだろう。という疑問。Karetta|Gaucheプログラミング(立読み版)|継続渡しスタイルより。 (* 2)を使わないで継続を実行する。 (call/cc (lambda (cont) (* 2 (cont 10)))) ; 10 contの中には、PRINT-AND-NEX…

新関数を考えてみた

unfoldは便利なんだけど、cons邪魔杉なので新関数unを考えてみた。 (define (un p tail f seed) (if (p seed) (tail seed) (f seed (lambda (x) (un p tail f x))))) fは2個の引数、seedと手続きを取るようにする。 リストのコピー。 (un null? values (lamb…

unfoldのメモ

unfoldが便利っぽい。メモメモgaucheのマニュアルを見ると、 Function: unfold p f g seed &optional tail-gen [SRFI-1] 基本リスト再帰構築子です。以下のように再帰的に定義されています。 (unfold p f g seed tail-gen) == (if (p seed) (tail-gen seed) …

Problem 10 - 力業

お、やっと終わった。20分くらい放置。 (define (primers n) (define (iter l) (if (null? l) '() (cons (car l) (iter (filter (lambda (o) (not (zero? (modulo o (car l))))) (cdr l)))))) (iter (cons 2 (list-tabulate (quotient (- n 1) 2) (lambda (x…

ふつうに解ける問題が

30問を目前にしてふつうに解ける問題がなくなってきた。ちょっとペースを落とそう。 もう一段階上を目指さないと無理っぽい。 ここからが勝負。

Problem 29 - a^b

イマイチ。Problem 29 - PukiWiki 2 ≤ a ≤ 5 と 2 ≤ b ≤ 5について, a^bを全て考えてみよう: * 2^2=4, 2^3=8, 2^4=16, 2^5=32 * 3^2=9, 3^3=27, 3^4=81, 3^5=243 * 4^2=16, 4^3=64, 4^4=256, 4^5=1024 * 5^2=25, 5^3=125, 5^4=625, 5^5=3125これらを小さい順…

Problem 24 - 順列(2)

前回の教訓を元に攻めていく。Problem 24 - PukiWiki 順列とはモノの順番付きの並びのことである. たとえば, 3124は数1, 2, 3, 4の一つの順列である. すべての順列を数の大小でまたは辞書式に並べたものを辞書順と呼ぶ. 0と1と2の順列を辞書順に並べると 012…

Problem 24 - 順列(1)

Vimごと落ちた。失敗。Problem 24 - PukiWiki (define (permutations s) (define (flatmap proc seq) (apply append (map proc seq))) (define (remove-1 item sequence) (cond ((null? sequence) '()) ((equal? (car sequence) item) (cdr sequence)) (else…

Problem 34 - 階乗してもいっしょ

ガリガリいっちゃうよ。Problem 34 - Project Euler 145 is a curious number, as 1! + 4! + 5! = 1 + 24 + 120 = 145.Find the sum of all numbers which are equal to the sum of the factorial of their digits.Note: as 1! = 1 and 2! = 2 are not sums …

Problem 36 - 10進数でも2進数でも回文数

また翻訳してみる。Problem 36 - Project Euler The decimal number, 585 = 1001001001_2 (binary), is palindromic in both bases.Find the sum of all numbers, less than one million, which are palindromic in base 10 and base 2.(Please note that th…

Problem 30 - 各桁をn乗した和

求めてみたけど、まだ不明な点がある。Problem 30 - PukiWiki 驚くべきことに, 各桁を4乗した和が元の数と一致する数は3つしかない. * 1634 = 1^4 + 6^4 + 3^4 + 4^4 * 8208 = 8^4 + 2^4 + 0^4 + 8^4 * 9474 = 9^4 + 4^4 + 7^4 + 4^4ただし, 1=1^4は含まない…

Problem 21 - 友愛数

オイラーは60余りの友愛数を求めたらしい。僕も挑戦するぞ(嘘 d(n)をnの真の約数の和と定義する。(真の約数とはn以外の約数のことである。) もし、d(a) = b かつ d(b) = a を満たすとき、aとbは友愛数(親和数)であるという。例えば、220の約数は1, 2, 4…

Problem 22 - 名前のスコア

ちょっとおサボリしちゃった。Problem 22 - PukiWiki 5000個以上の名前が書かれている46Kのテキストファイル names.txt を用いる. まずアルファベット順にソートせよ.のち, 各名前についてアルファベットに値を割り振り, リスト中の出現順の数と掛け合わせる…

Problem 28 - 対角線の和

この問題は面白かった。Problem 28 - PukiWiki 1から初めて右方向に進み時計回りに数字を増やしていき, 5×5の螺旋が以下のように生成される: 21 22 23 24 25 20 07 08 09 10 19 06 01 02 11 18 05 04 03 12 17 16 15 14 13対角線上の数字の合計はどちらも101…

Problem 19 - 曜日計算

だんだん難しくなってきた。Problem 19 - PukiWiki 次の情報が与えられている。 * 1900年1月1日は月曜日である。 * 9月、4月、6月、11月は30日まであり、2月を除く他の月は31日まである。 * 2月は28日まであるが、うるう年のときは29日である。 * うるう年は…

Problem 20 - 100!

100の階乗Problem 20 - PukiWiki n × (n - 1) × ... × 3 × 2 × 1 を n! と表す。100! の各桁の数字の合計を求めよ。 簡単。 前に作ったユーティリティを利用して、 (define (number->list n) (define (iter acc n) (let ((q (quotient n 10)) (m (cons (modu…

Problem 25 - フィボナッチ1000桁

みんな大好きフィボナッチ。Problem 25 - PukiWiki フィボナッチ数列は以下の漸化式で定義される: Fn = Fn-1 + Fn-2, ただし F1 = 1, F2 = 1.最初の12項は以下である. * F1 = 1 * F2 = 1 * F3 = 2 * F4 = 3 * F5 = 5 * F6 = 8 * F7 = 13 * F8 = 21 * F9 = 34…

Problem 18 - パスカルの三角形な順路問題

順路問題。Problem 18 - PukiWiki 以下の三角形の頂点から下まで移動するとき、その数値の合計の最大値は23になる。 3 7 5 2 4 6 8 5 9 3この例では 3 + 7 + 4 + 9 = 23以下の三角形を頂点から下まで移動するとき、その最大の合計値を求めよ。 75 95 64 17 4…

Problem 48 - 自分で翻訳してみる

簡単な問題からやってこう。48が簡単そうだけど、翻訳が無いので、自分で翻訳。Problem 48 - Project Euler 次の式は、1^1 + 2^2 + 3^3 + ... + 10^10 = 10405071317 である。 では、1^1 + 2^2 + 3^3 + ... + 1000^1000 の下10桁を求めよ。 ま、翻訳するほど…

Problem 16 - 2の1000乗

簡単!Problem 16 - PukiWiki 2^15 = 32768 であり、これの各数字の合計は 3 + 2 + 7 + 6 + 8 = 26 となる。同様にして、2^1000 の各数字の合計を求めよ。 はいはい。 (define (digit->integer c) (if (char-numeric? c) (- (char->integer c) (char->intege…