import sequtils,math,sugar,macros,strutils ### gorge で nim -c exec して import macro eval(s:static[string]): auto = parseStmt(s) template exec(command:string,input:string="") = block:(const _ = gorge(command,input)) exec("cat > y826t.nim",""" import sequtils,math,sugar proc getIsNotPrimes(n:int) :seq[bool] = result = newSeq[bool](n+1) result[0] = true result[1] = true for i in countup(2,n.float.sqrt.int): if result[i]: continue for j in countup(i*2,n,i): result[j] = true echo getIsNotPrimes(1000_10) """) exec("nim c --hints:off --verbosity:0 y826t.nim") exec("cat > y826tt.nim","const isNotPrimes = ") exec("nim c -r --hints:off --verbosity:0 --nimcache:./nimcache y826t.nim >> y826tt.nim") include "y826tt.nim" exec("rm y826t.nim y826tt.nim") # ### 解答コード proc getchar_unlocked():char {. importc:"getchar_unlocked",header: "" ,discardable.} proc scan(): int = while true: let k = getchar_unlocked() if k < '0': return result = 10 * result + k.ord - '0'.ord let n = scan() let p = scan() if p == 1 : quit "1",0 if p >= n div 2 and not isNotPrimes[p]: quit "1",0 var ans = n div 2 - 1 for i in countup(n div 2 + 1,n): if isNotPrimes[i] : ans += 1 echo ans