2015-03-01から1ヶ月間の記事一覧
久しぶりに AWK(GAWK)で書いてみた。 やはり R で書くとすっきり書ける。 $ cat prog.awk#!/usr/local/bin/gawk -ffunction F(term, a, b, c, n, count, d) { a = 3 b = 0 c = 2 count = 1 for (n = 3; ; n++) { d = a+b if (d % n == 0 && ++count == ter…
素因数分解なんだけど > 対象の数を、まずは2でこれ以上割り切れなくなるまで割り尽くします。> 次にその商を3で割り尽くします。> さらにその商を4,5,6,・・・の順で割りつくしていけば...4 や 6... で割ることを試みるのは,無駄だと知らない訳か? 5 以上…
Q1. 数列 F(n) を以下の漸化式で定義する。F(0) = 3, F(1) = 0, F(2) = 2,F(n) = F(n-2) + F(n-3) (n>2のとき)このような数列において,n > 1 かつ F(n) の値が n が割り切れる場合を考える。たとえば,n = 2, 3, 5, 7, 11, 13, 17, 19 のとき,F(n) の値は…
文字列 "a/b" の形式で表される 2 つの分数の和を,同じ形式で表示する分母が 1 の場合は,分子だけを表示するfunc = function(s1, s2) { euclid = function(m, n) { # ユークリッドの互除法 while ( (temp = n%%m) != 0) { n = m m = temp } return(m) } a …
「探索を逆方向から攻める」は不完全であった。条件を満たす最小の整数を漏らしていた。 b = 0.111111 * 1:9 # b は 0.111111 ~ 0.999999 の 9 種類b2 = 2 * bb.sq = b^2n = 1e+05 # 探索範囲上限for (a in 1:n) { x = a * b2 + b.sq # 求める整数から a^2 …
1 ~ n までの整数乱数を発生する sample 関数を使うとき,第1引数はベクトルを指定しない方が速い。 system.time({ set.seed(1) a = sample(1:1e8, 1e5, replace=TRUE)})system.time({ set.seed(1) b = sample(1e8, 1e5, replace=TRUE)})all(a == b) 実行結…
符号付き 32 ビット整数を英語で読めとのお達しで...o1 = c("One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine", "Ten", "Eleven", "Twelve", "Thirteen", "Fourteen", "Fifteen", "Sixteen", "Seventeen", "Eighteen", "Nineteen")o2…
「カプレカ数」での,二番目の定義によるものを出力するプログラム。 かなり時間のかかるプログラムであり,5 番目のカプレカ数を出力するまでには 35 秒かかる。 N = 631764for (i in 0:N) { str = unlist(strsplit(as.character(i), "")) big = as.numeric…
0 から 1000 までのカプレカ数を求めよとのことだ...カプレカ数とは馴染みのないものであるが,定義は 2 通りあるそうだ。1. 2 乗して前の部分と後ろの部分に分けて(偶数桁 2n 桁である場合は先頭 n 桁と末尾 n 桁に分け,奇数桁 2n + 1 桁である場合は先頭…
「10000 以下の最大の完全数を答えよ」ということなのだが,完全数は小さい方から順に,6, 28, 496, 8128, 33550336, 8589869056, 137438691328, 2305843008139952128, 2658455991569831744654692615953842176, 1915619426082361072947933780843036381309973…
数字の 0 から 9 までを一度ずつ使ってできる数で,0 を除く全ての一桁の数で割り切れ,この数に含まれる任意の隣り合う二桁でも割り切れる,そんな数を探せ。 library(e1071) d = cbind(permutations(9), 0) # 2 と 5 を因数に含むので,末尾が 0 の数だ w …
前の記事(プログラム書法)で,似たようなことを行う 2 つの関数を 1 つにまとめたが,今回はさらに,もう 2 つの関数を抱き合わせにする。 関数名を覚えるのが面倒ということは些細な理由である。関数のメンテナンスが「間違いなく」,「容易に」できると…
まことにもっていらぬお節介の極みであるが,「二群間で差のある変数を特定する」で提示されている 2 つの関数をまとめて,データとグループ変数の指定を少し柔軟にし,結果をソートするかしないかの引数を追加したり...ほとんど原型をとどめなくなちゃった…
整数の平方根をとったとき,小数点以下 1 ~ 6 桁が全て同じ数字になるような最小の整数を求めよ。 求める数 x の平方根の整数部分を a 小数部分を b とする。つまりその整数は (a + b) ^ 2 = a ^ 2 + 2 * a * b + b ^2 であるとする。小数部分を小数点以下 …
素数の存在範囲(上限)n と階級幅 w を与えて,素数の度数分布を求める。(たいしておもしろくない) > func = function(n, w) {+ x = 2:n+ f = table(ceiling(x[1-outer(x, x)] / w))+ m = nchar(as.character(n))+ label = as.integer(names(f)) * w+ lab…
辺の長さが整数で、体積がnの直方体を考える。縦、横、高さのいずれも長さが1以外の直方体を作ることができる整数nが1≦n≦300の範囲にいくつあるかを求めよ。 いわれてみれば確かに,「三次元の合成数」といえなくもないが。要するに,約数が 3 個以上あるの…
いろいろ拡張した。 stack = NULLpush = function(x) { c(x, stack) ->> stack}pop = function() { x = stack[1] stack[-1] ->> stack return(x)}debug = TRUE # スタックの状態を表示calc = function(eq) { cat(eq, "\n") func = c("sqrt", "log", "log10",…
以下に示す 30 個の整数を 10 個ずつに分け,それぞれの数値の和が 3 つとも等しくなるような分割のしかたを求めよ。138, 104, 139, 124, 157, 128, 134, 150, 157, 81,159, 159, 98, 134, 147, 154, 113, 117, 138, 156,116, 147, 81, 150, 95, 131, 156, 9…
1!+2!+3!+…+2015!の下三桁を求めてください。a = numeric(2015)f = 1for (i in seq_along(a)) { a[i] = f = (f * i) %% 1000}sum(a) %% 1000答え:313 2015/03/07 10:00 解禁
差が 2 である 2 つの素数の組 x = 2:1000x = x[1-outer(x, x)]s = diff(x) == 2cat(sub(", $", "", paste(sprintf("(%s), ", apply(cbind(x[s], (x[-1])[s]), 1, paste, collapse=", ")), collapse="")))
カナ文字については既出 出題は,まずはモールス符号を平文化すればわかる。 m = c("01", "1000", "1010", "100", "0", "0010", "110", "0000", "00", "0111","101", "0100", "11", "10", "111", "0110", "1101", "010", "000", "1","001", "0001", "011", "…
入力 n に対して 1≦a≦b≦c≦n(a, b, c, n はすべて整数)を満たす a, b, c の中で,これらを 3 辺とする三角形が成り立つ場合の組み合わせを求めるプログラムを書け。n = 3 のときは,7 である。さて,n = 1000 のときの答えを求めよ。R で素直に書くと,とて…