結果
問題 |
No.308 素数は通れません
|
ユーザー |
![]() |
提出日時 | 2015-12-01 22:24:30 |
言語 | Ruby (3.4.1) |
結果 |
WA
|
実行時間 | - |
コード長 | 1,578 bytes |
コンパイル時間 | 61 ms |
コンパイル使用メモリ | 7,424 KB |
実行使用メモリ | 12,672 KB |
最終ジャッジ日時 | 2024-09-14 06:42:34 |
合計ジャッジ時間 | 13,643 ms |
ジャッジサーバーID (参考情報) |
judge6 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 94 WA * 13 |
コンパイルメッセージ
Main.rb:43: warning: assigned but unused variable - i Syntax OK
ソースコード
require 'prime' N_MAX = 110 $mp = Array.new(N_MAX).map{Array.new(N_MAX,0)} $used = Array.new(N_MAX).map{Array.new(N_MAX,false)} $n = gets.chomp.to_i $vx = [1,0,-1,0] $vy = [0,1,0,-1] def dfs(w,h,y,x) return false if y<0 || x<0 || y>=h || x>=w return false if $used[y][x] $used[y][x] = true return false if $mp[y][x]==1e9 return true if $mp[y][x]==$n t = $mp[y][x] return false if Prime.prime?(t) for i in 0...4 return true if dfs(w,h,y+$vy[i],x+$vx[i]) end return false end def powmod(a,b,m) return 1 if b==0 p = powmod(a,b/2,m) p = p*p%m p = p*a%m if b%2==0 return p end # http://d.hatena.ne.jp/pashango_p/20090704/1246692091 def isP_MR(q) k = 1000 return true if q==2 return false if q<2 return false if q&1==0 d = (q-1)>>1 while d&1==0 d>>=1 end for i in 0...k a = rand(q-2)+1 t = d y = powmod(a,t,q) while t!=q-1 && y!=1 && y!=q-1 y = powmod(y,2,q) t <<= 1 end if y!=q-1 && t&1==0 return false end end return true end if $n<100 for w in 3...$n h = $n/w + ( $n%w == 0 ? 0 : 1 ) for i in 0...N_MAX for j in 0...N_MAX $mp[i][j] = 1e9 if i<h && j<w && i*w+j<$n $mp[i][j] = i*w+j+1 end $used[i][j] = false end end if dfs(w,h,0,0) puts w break end end else c = 8 while true # process if $n%c!=1 puts c break end if isP_MR($n-c) puts c break end # succeed while true c += 2 break if isP_MR(c+1) end end end