# GSoC Second Week

This week, I implemented some algorithms (`gf_div`

, `gf_gcd`

etc.) and apart from it I looked into the design consideration also.

# Algorithms Implemented

I implemented
- `gf_div`

```
void GaloisFieldDict::gf_div(const GaloisFieldDict &o,
const Ptr<GaloisFieldDict> &quo,
const Ptr<GaloisFieldDict> &rem) const
```

This will change the value of `quo`

and `rem`

.

`gf_quo`

This will return the quotient only. It will help when we only need quotient after dividing.
It is better than `gf_div`

in terms of time complexity.

`gf_lshift`

It is efficient way to multiply a polynomial in `GaloisField`

by `x**n`

`gf_rshift`

It is efficient way to divide a polynomial in `GaloisField`

by `x**n`

```
void GaloisFieldDict::gf_rshift(const integer_class n,
const Ptr<GaloisFieldDict> &quo,
const Ptr<GaloisFieldDict> &rem) const
```

Just like gf_div, it also changes the value of `quo`

and `rem`

.

`gf_sqr`

This will square the polynomial in `GaloisField`

.

`gf_pow`

It uses binary multiplication to power a polynomial in `GaloisField`

.

`gf_monic`

Changes a polynomial to its monic representation, i.e. `3*x**2 + 4`

in `GF(5)`

becomes `x**2 + 3`

. Here leading coefficient becomes `one`

.

`gf_gcd`

and`gf_lcm`

`gf_gcd`

by Euclidean Algorithm and `gf_lcm`

is product of the two polys divided by their gcd in the finite field.

# Design Change

SymEngine’s codebase for `UIntPoly`

has changed, it inherits `UPolyBase`

, which has two private variables, one is to store the variable and other is container. `UIntPoly`

uses `UIntDict`

as a container and `UIntDict`

is inherited from `ODictWrapper`

.
Now as `GaloisField`

is just representation of polynomial so I needed something similar, so I made `GaloisField`

inherit from `UPolyBase`

, and made a container named `GaloisFieldDict`

.
This prevented a lot of code duplicacy.
Still there is a lot of conversation going on this topic, I will better post after the final design is fixed.