4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Google recruit problem, exp and prime

Last updated at Posted at 2020-12-23

お題

{e(自然対数の底)の値で連続する10桁の数のうち,最初の素数}

をrubyで求めよ.ただし,e(自然対数の底)は200桁までで

2.71828182845904523536028747135266249775
7247093699959574966967627724076630353547
5945713821785251664274274663919320030599
2181741359662904357290033429526059563073
81323286279434907632338298807531952510190

である.これをテキストにコピーして読みこませよ.

解説

テキストファイルの読み込み

テキストファイルの内容を全て読み込みたいのであればreadメソッドを使えばよい.読み込めているかどうか心配であれば,putを用いて表示すればよい.


exp=File.read("e.txt")
#->自然対数の底eの値200桁までの値のテキストファイルを読み込む

p exp
#->内容確認

10桁ずつ表示させる方法

whileループを用いて10桁の整数をつくる.念のため,各配列に格納されている数値を整数に変換しておく.

#ループを回して10桁の整数を自然対数から切り出していく
i=0

while(i<200)
 j=0
 num=0
 while (j<0)
  num=10*num+exp[i+j].to_i
  j+=1
 end
i+=1
end

素数判定

素数や素因数分解を扱うライブラリであるprimeを用いた.Prime.prime?(number)は,変数numberが素数かどうかを判別することができ,素数であればtrueを,そうでなければfalseを返す.関数find_primeは変数numを素数か否か判別するが,numが素数であればnumを返し,合成数であれば0を返すようにした.そして,返した素数はあらかじめ用意した自然対数の底に含まれる十桁の素数を格納する配列に入れていく.下記はfind_primeのコードになる.

require 'prime' 

def find_prime(num)

 if(Prime.prime?(num)==true) then
  return num
 else
  return 0
 end
end

プログラム

上記の解説をまとめたソースコードとなる.


require 'prime'

def find_prime(num)
  if(Prime.prime?(num)==true) then
    #puts 1
    return num
  else
    #puts 0
    return 0
  end
end

def count_digits(num)
  num.to_s.length
end

exp=File.read("e.txt")
p exp
#puts count_digits(exp)
#2重ループにして10桁の整数を切り出す

i=0
result=[]

while (i<200) do
  j=0
  num=0

  while (j<10) do
    num=10*num+exp[i+j].to_i
    j+=1
  end
  i+=1

  if (find_prime(num)!=0) then
    result.push(num)
  end
  #puts num
  #puts find_prime(num)
end

puts "素数一覧"
puts result
puts " "
puts "最初の素数"
puts result[0]

出力結果

C:\Users\nobua\M1>ruby google_recruit_problem_2.rb
"2.7182818284590452353602874713526624977572470936999595749669676277240766303535475945713821785251664274274663919320030599218174135966290435729003342952605956307381323286279434907632338298807531952510190"
素数一覧
7427466391
7413596629
6059563073
3490763233
2988075319

最初の素数
7427466391

参考文献

https://ist.ksc.kwansei.ac.jp/~nishitani/?GoogleEntExam


  • source ~/grad_members_20f/members/NobuakiMori/google_recruit.org
4
0
1

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
4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?