Генерировал ответы в таком духе:
from prettytable import PrettyTable
def isPrime(n):
if n == 2 or n == 3: return True
if n%2 == 0 or n<2: return False
for i in range(3, int(n**0.5)+1, 2):
if n%i == 0: return False
return True
t = PrettyTable(['p','#{x²=-1}','#{x²=2}','#{x²+y²=1}',\
'#{y²=x³+x²}','#{y²=x³-x}'])
for p in range(3,50+1,2):
counts = [0]*5
if isPrime(p):
for x in range(p):
if (x*x+1)%p == 0: counts[0] += 1
if (x*x-2)%p == 0: counts[1] += 1
for y in range(p):
if (x*x+y*y-1)%p == 0: counts[2] += 1
if (x*x*x+x*x-y*y)%p == 0: counts[3] += 1
if (x*x*x-x-y*y)%p == 0: counts[4] += 1
t.add_row([p,*counts])
else:
t.add_row([p,'','','','',''])
t.align="r"
print(t)
Пример того, на что еще интересно смотреть (и при этом есть достаточно доступный ответ) — количества точек на сферах mod p, начиная с x²+y²+z²=1 mod p.
Если хочется менее расплывчатых вопросов — то вот такие, например, задачи давал: https://dev.mccme.ru/~merzon/leto2022/p-count-ex.pdf
Если, наоборот, хочется возвышенных разговоров — то вот (для школьников, не для экспертов) есть рассказа А.Кузнецова про теорему Ферма, гипотезу Римана и алгебраическую геометрию: https://youtu.be/ElFNGh4WF6Y
