Punkt krawtowy przy pomocy float

0

Cześć. Muszę zrobić to zadanie a nie mam pojęcia jak się za to zabrać. Punkt kratowy to punkt, którego współrzędne w układzie kartezjańskim są liczbami całkowitymi. Dane jest koło
o środku w początku układu współrzędnych i promieniu r. Znajdź wszystkie punkty kratowe leżące wewnątrz
takiego koła.

1

Brutal force:

Dwie pętle po x,y od math.ceil (-r) do math.floor(+r) i sprawdzasz pitagorasem

0

Napisałem coś takiego i jak mogę to przerobić?

def N(r):

ilosc = 0
for x in range(0,r):
    for y in range(1,r+1):
        if (x*x + y*y) <= r*r:
            ilosc = ilosc + 1

ilosc = ilosc * 4 + 1

return ilosc

print("Podaj promien r")
r = float(input())

print(N(r))

2
  1. Dlaczego odmiennie masz pętlę po X a po Y?
  2. "znajdź wszystkie punkty" rozumiem nie podać ilość, tylko je wylistować
  3. Podoba mi się, że nie robisz roboty w mainie, tylko w funkcji
    Ja rozumiem, użyć pustej listy list = [ ] i w ifie dołączać przez append() - tę listę potem return

Gotowca ci nie dam, masz pełne wskazówki.

0

Zacznij od Wiki
https://en.m.wikipedia.org/wiki/Gauss_circle_problem

@szybki12111: Naiwnie Ci podał @AnyKtokolwiek, wychodzi z tego taki, paskudny kod:

def N(r):
  cnt = 0
  for x in range(int(math.ceil(-r)), int(math.floor(r)) + 1):
    for y in range(int(math.ceil(-r)), int(math.floor(r)) + 1):
      if x * x + y * y <= r * r:
        cnt += 1
  return cnt

Optymalizować można, szukanie dzielników, faktoryzacja...

1 użytkowników online, w tym zalogowanych: 0, gości: 1