裏 RjpWiki

Julia ときどき R, Python によるコンピュータプログラム,コンピュータ・サイエンス,統計学

フィボナッチ数列(またか)

2014年11月17日 | ブログラミング

1,1,2,3から始まるフィボナッチ数列の100桁目の数字は何か

n = 30
fib = integer(n)
fib[1] = fib[2] = 1
for (i in 3:n) {
  fib[i] = fib[i-1]+fib[i-2]
}
ans = paste(fib, collapse="")
if (nchar(ans) >= 100) {
  substring(ans, 100, 100)
}

    

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

最大公約数で公開鍵を生成

2014年11月17日 | ブログラミング

1 から 100 までの素数を 2 つ選び,それぞれ p, q とする。
以下の 2 つの条件を満たす自然数 e が p + q 個になるような p, q の組み合わせをすべて求めよ。

条件1:0 < e < (p - 1)(q - 1)
条件2:gcd((p - 1)(q - 1), e) = 1
   ( (p - 1)(q - 1) と e の最大公約数が 1 である)

普通に書いても,この程度の計算量なら,簡単に求めることができるのだが。

prime = c(2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97)

euclid = function(m, n) {
  repeat {
    mod = m %% n
    if (mod == 0) return(n)
    m = n
    n = mod
  }
}

func = function(x, y) {
  count = 0
  for (e in seq_len((x-1)*(y-1)-1)) {
    count = count+(euclid((x-1)*(y-1), e) == 1)
  }
  count
}

for (i in 1:(length(prime)-1)) {
  for (j in (i+1): length(prime)) {
    if (func(prime[i], prime[j]) == prime[i]+prime[j]) {
      print(c(prime[i], prime[j]))

    }
   
}

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

一行野郎(2)

2014年11月17日 | ブログラミング

180 以上 189 以下の 10 個の整数の中から異なる 3 個 a, b, c を選び,和が 560 になる組み合わせを全て求めるワンライナーを書け。

Rscript -e "n = 180:189; a = 179+which(outer(outer(n, n, '+'), n, '+') == 560, arr.ind=TRUE); b = a[,1] < a[,2] & a[,2] < a[,3]; a[b,]"
     dim1 dim2 dim3
[1,]  185  187  188
[2,]  185  186  189
[3,]  184  187  189
[4,]  183  188  189

以下の方が,短いか。

Rscript -e "a = expand.grid(180:189, 180:189, 180:189); a[rowSums(a)==560 & a[,1] < a[,2] & a[,2] < a[,3],]"
    Var1 Var2 Var3
876  185  187  188
966  185  186  189
975  184  187  189
984  183  188  189

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

一行野郎

2014年11月17日 | ブログラミング

異なる 3 桁の整数 a, b, cが,以下の条件を満たすとき,a, b, c を求めるワンライナーを書け
   1. aはbより261小さい。
   2. aはcより333大きい。
   3. cはbの100の位の数と一の位の数を入れ替えた数である。
   4. aは7の倍数である。
まあ,結果出力が微妙だけど。
Rscript -e "a = 7*1:(999 %/% 7); c = a - 333; b = a + 261; x = c >= 100 & b <= 999 & c %% 10 == b %/% 100 & b %% 10 == c %/% 100; cbind(a[x], b[x], c[x])"
     [,1] [,2] [,3]
[1,]  490  751  157
[2,]  581  842  248
[3,]  672  933  339

コメント (1)
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

PVアクセスランキング にほんブログ村

PVアクセスランキング にほんブログ村