結果
問題 | No.308 素数は通れません |
ユーザー |
![]() |
提出日時 | 2015-12-02 18:50:02 |
言語 | Ruby (3.4.1) |
結果 |
AC
|
実行時間 | 176 ms / 1,000 ms |
コード長 | 1,894 bytes |
コンパイル時間 | 133 ms |
コンパイル使用メモリ | 7,424 KB |
実行使用メモリ | 12,800 KB |
最終ジャッジ日時 | 2024-11-27 18:31:32 |
合計ジャッジ時間 | 16,631 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 107 |
コンパイルメッセージ
Main.rb:47: 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>=wreturn false if $used[y][x]$used[y][x] = truereturn false if $mp[y][x]==1e9return true if $mp[y][x]==$nt = $mp[y][x]return false if isP_MR(t)for i in 0...4return true if dfs(w,h,y+$vy[i],x+$vx[i])endreturn falseenddef powmod(a,b,m)result = 1while b>0result = (result*a)%m if b&1==1a = (a*a)%mb >>= 1endreturn resultend# https://ja.wikipedia.org/wiki/%E3%83%9F%E3%83%A9%E3%83%BC%E2%80%93%E3%83%A9%E3%83%93%E3%83%B3%E7%B4%A0%E6%95%B0%E5%88%A4%E5%AE%9A%E6%B3%95def isP_MR(q)k = 1000# return Prime.prime?(q) if q<10000000return true if q==2return false if q<2return false if q&1==0d = q-1while d&1==0d>>=1end# r = [q-1,(2*Math.log(q)**2).floor].minfor i in 0...ka = rand(q-2)+1t = dy = powmod(a,t,q)while t!=q-1 && y!=1 && y!=q-1y = (y*y) % qt <<= 1endif y!=q-1 && t&1==0return falseendendreturn trueendif $n<100for w in 3...$nh = $n/w + ( $n%w == 0 ? 0 : 1 )for i in 0...N_MAXfor j in 0...N_MAX$mp[i][j] = 1e9if i<h && j<w && i*w+j<$n$mp[i][j] = i*w+j+1end$used[i][j] = falseendendif dfs(w,h,0,0)puts wbreakendendelseif $n%8!=1puts 8elseif isP_MR($n-8)puts 14elseputs 8endend# 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# endend