if we consider the entire points group like this:
from lowest possible X
(1)X:0000000000000000000000000000000000000000000000000000000000000001 Y:4218f20ae6c646b363db68605822fb14264ca8d2587fdd6fbc750d587e76a7ee
(2)X:0000000000000000000000000000000000000000000000000000000000000001 Y:bde70df51939b94c9c24979fa7dd04ebd9b3572da7802290438af2a681895441
(3)X:0000000000000000000000000000000000000000000000000000000000000002 Y:66fbe727b2ba09e09f5a98d70a5efce8424c5fa425bbda1c511f860657b8535e
(4)X:0000000000000000000000000000000000000000000000000000000000000002 Y:990418d84d45f61f60a56728f5a10317bdb3a05bda4425e3aee079f8a847a8d1
...
to highest possible X
(.)X:fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2c Y:0e994b14ea72f8c3eb95c71ef692575e775058332d7e52d0995cf8038871b67d
(.)X:fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2c Y:f166b4eb158d073c146a38e1096da8a188afa7ccd281ad2f66a307fb778e45b2
all points with lowest Y-coordinate are odd and with highest are even. and if we could calculate exact position of point in this group there could be a correlation
to secp256k1 subgroup S={G,2G,3G,...,(N-1)G}.
but secp256k1 P-N is 432420386565659656852420866390673177326 more than 2^128 since not all values of P can become X-coordinate.
Gx = 55066263022277343669578718895168534326250603453777594175500187360389116729240
Gy = 32670510020758816978083085130507043184471273380659243275938904335757337482424
P = 115792089237316195423570985008687907853269984665640564039457584007908834671663
N = 115792089237316195423570985008687907852837564279074904382605163141518161494337
#print(P-N)432420386565659656852420866390673177326
#2^128 340282366920938463463374607431768211456
#input()
starting_x = 0x0
p = 0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f
beta = 0x7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee
beta2 = 0x851695d49a83f8ef919bb86153cbcb16630fb68aed0a766a3ec693d68e6afa40
def oncurve(x,y): # Checks if point satifies x^3 +7 = y^2 , mod P
x = (x*x*x+7) % p
y = (y*y) % p
return x==y
while starting_x < p:
x = starting_x
ysquared = ((x*x*x+7) % p)
y1 = pow(ysquared, (p+1)//4, p)
y2 = (y1 * -1) % p
if (y1**2) % p == (x**3 + 7) % p:
print(f"Secp256k1 True X Coordinate: {hex(x)[2:].zfill(64)} [{x}]")
print(f'{hex(x)[2:].zfill(64)}:{hex(y1)[2:].zfill(64)}')
print( oncurve( x,int(hex(y1)[2:].zfill(64), 16)) )
print(f'{hex(x)[2:].zfill(64)}:{hex(y2)[2:].zfill(64)}')
print( oncurve( x,int(hex(y2)[2:].zfill(64), 16)) )
print(hex((x*beta) % p)[2:].zfill(64))
print(hex((x*beta2) % p)[2:].zfill(64))
print('---------------------------------------------------------------------------------------------------------------------------------')
starting_x += 1