# Rational points on an elliptic curve over a number field

There might be a misunderstanding in your question.

The idea is probably to give examples of rational points on the elliptic curve
when considered over various number fields.

## Checking if a point is on a curve

Define a test to check if a point is on the curve.

```
sage: def check(x, y):
....: print(y^2)
....: print(x^3 - 3267*x + 45630)
....: return(y^2 == x^3 - 3267*x + 45630)
```

Check that `(-21, 324)`

is on the curve.

```
sage: xa, ya = (-21, 324)
sage: check(xa, ya)
104976
104976
True
```

Check that `(21 + 6*s, 54 - 42*s)`

is on the curve, where `s^2 = 33`

.

```
sage: K.<s> = NumberField(x^2 - 33)
sage: xb, yb = (21 + 6*s, 54 - 42*s)
sage: check(xb, yb)
-4536*s + 61128
-4536*s + 61128
True
```

Check that `(15 + 36*I, 216 - 324*I)`

is on the curve, where `I^2 = -1`

.

```
sage: C.<I> = NumberField(x^2 + 1)
sage: xc, yc = (15 + 36*I, 216 - 324*I)
sage: check(xc, yc)
-139968*I - 58320
-139968*I - 58320
True
```

But those are not the same point on the elliptic curve.

I suppose your question is, given a number field F, how to find a point on the elliptic curve over F.

## Finding rational points on an elliptic curve over a number field

Here is an example of a naïve search: we run through integer elements in a number field `K`

and check if they are x-coordinates of points on `E/K`

.

Define an elliptic curve.

```
sage: E = EllipticCurve([0, 0, 0, -3267, 45630])
sage: E
Elliptic Curve defined by y^2 = x^3 - 3267*x + 45630 over Rational Field
```

Consider the elliptic curve over a number field.

```
sage: K.<s> = NumberField(x^2 - 33)
sage: EK = E/K
```

Now use the method `is_x_coord`

:

```
sage: for a in range(-30,31):
....: for b in range(-30,31):
....: if EK.is_x_coord(a + b*s): print a + b*s
....:
-21
6
7
15
-6*s + 21
6*s + 21
```

Then it's not too hard to figure out the corresponding y-coordinates. I'll leave it as an exercise!

## Generators

The `gens`

method can also be useful.

```
sage: E = EllipticCurve([0, 0, 0, -3267, 45630])
sage: K.<s> = NumberField(x^2 - 33)
sage: EK = E/K
sage: sage: EK.gens()
[(-21 : -324 : 1), (6 : 162 : 1), (-6*s + 21 : -42*s - 54 : 1)]
```

For the field C:

```
sage: C.<I> = NumberField(x^2 + 1)
sage: EC = E/C
sage: EC.gens()
[(-21 : -324 : 1),
(-129 : -1296*I : 1),
(-72*I + 15 : -648*I - 432 : 1),
(72*I + 15 : 648*I - 432 : 1)]
```