f=lambda r,x=0:r-x and-~((r*r-x*x)**.5%1>0)*4+f(r,x+1)
Experimente online!
Menos golfe (55 bytes) ( TIO )
lambda r:8*r-4*sum((r*r-x*x)**.5%1==0for x in range(r))
Isso estima a saída como 8*r, em seguida, corrige os cruzamentos de vértice. O resultado é 8*r-g(r*r), onde g(x)conta o número de maneiras de escrever xcomo uma soma de dois quadrados (exceto g(0)=0).
Se o círculo nunca passou por nenhum vértice, o número de células tocadas seria igual ao número de arestas cruzadas. O círculo passa pelas 2*rlinhas de grade verticais e 2*rhorizontais, passando cada uma nas duas direções, num total de 8*r.
Porém, cada cruzamento em um vértice conta como dois cruzamentos de borda, enquanto apenas entra em uma nova célula. Assim, compensamos subtraindo o número de cruzamentos de vértices. Isso inclui os pontos nos eixos (r,0), assim como os triplos pitagóricos, como (4,3)para r=5.
Contamos para um único quadrante os pontos (x,y)com x>=0e y>0com x*x+y*y==n, em seguida, multiplicar por 4. Fazemos isso através da contagem do numer de sqrt(r*r-x*x)que são número inteiro para xno intervalo [0,r).