5
0

More than 3 years have passed since last update.

google recruit

Last updated at Posted at 2020-12-11

!Mac OS X-10.15.7 !ruby-2.7.1p83$

課題

授業の最終課題でgoogle recruit の課題が出たのでやってみた.

  • e(自然対数の底)の値で連続する10桁の数のうち,最初の素数を求めよ

作成したプログラム

# coding: utf-8
require "prime"

def check_prime(num)
  return Prime.prime?(num)
end

def make_num
  e = "2.71828182845904523536028747135266249775724709369995957496696762772407663035354759457\
13821785251664274274663919320030599218174135966290435729003342952605956307381323286279434907\
632338298807531952510190"
  num = e.delete(".")
  i = 0
  loop{
    slice_num = num.slice(i..i+9).to_i
    puts slice_num
    if check_prime(slice_num) == true
      puts "素数です"
      break
    end
    i = i+1
  }
end

make_num

解説

素数判定する関数と10桁の整数を作成する関数を作成

素数判定にはprimeっていうモジュールがあったからインポートしてそれを使用.値を入力すると素数かどうかをtrue かfalseで返してくれる

あとはループして10桁ずつ変数に入れて判定するだけ

めっちゃ簡単やったけど,グーグルの試験の時にはprimeモジュールあったんかな?なかったら若干反則な気がするけどまあいいか

発展課題

f(1)=7182818284
f(2)=8182845904
f(3)=8747135266
f(4)=7427466391
f(5)=__________

規則性見つけて当てはまる数字を入れるらしい

解説

問題に表示されている数字はすべて10桁でe(自然対数の底)に含まれる数字である。

さらに、各桁の合計が49になってる…

なので、e(自然対数の底)の値で連続する10桁の数のうち,各桁の和が49になる値を探す

作成したプログラム

# coding: utf-8
def count_digits(num)
  num.to_s.length
end

def check_49(num)
  sum = 0
  for j in 1..10 do
    a = num % 10
    sum = sum + a
    num = num / 10
  end
  if sum ==49
    return 1
  end
end

def main
  sum = 0
    e = "2.718281828459045235360287471352662497757247093699959574966967627724076630353547594571382178525166427427466391932003059921817413596629043572900334295260595630738132328627943490763\
2338298807531952510190"
    num = e.delete(".")
    len = count_digits(num)
    for i in 0..len-10 do
      slice_len = num.slice(i..i+9)
      slice_num = slice_len.to_i
      if check_49(slice_num)==1
    puts slice_len
      end
    end
end

main

実行結果は以下の通り

7182818284
8182845904
8747135266
7427466391
5966290435
2952605956

これより答えは5966290435

もうちょっときれいにコードを書きたいけど時間がないからこのくらいでいいか

参考にしたサイト

class Prime(リファレンスマニュアル)

instance method Array#slice


  • source ~/grad_members_20f/members/okamoto0910/article/google.org
5
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
0