Application Center - Maplesoft

App Preview:

QUADRATIC FIELDS and CLASS NUMBER FORMULA

You can switch back to the summary page by clicking here.

Learn about Maple
Download Application


 

QUADRATIC FIELDS and CLASS NUMBER FORMULA 

 

 

Miriam Ciavarella 

Universit? degli Studi di Torino 

Italy 

miriam.ciavarella@unito.it 

 

Marina Marchisio 

Universit? degli Studi di Torino 

Italy 

marina.marchisio@unito.it 

 

 

 

Introduction 

 

The aim of this document is to give same procedures in order to work explicitely with quadratic fields; in particular the idea of work was born in order to find a useful procedure to compute the class number of a quadratic filed. 

 

Many problems of number theory lead to another important question in the arithmetic of algebraic number fields, the question of decomposition of algebraic numbers into prime factors. We shall define a procedure Dec which returns the decomposition of algebraic numbers into prime factors in a quadratic filed. The problems of factorization are very closely connected with Fermat's (last) theorem. Historically, it was precisely the problem of Fermat's theorem which led Kummer to his fundamental work on the arithmetic of algebraic numbers.   

The number of divisor classes is a characteristic of the set of all divisors of the field. It is well known the important role of the number h of divisor classes of algebraic number filed play in the arithmetic of the field. Thus one would like to have an explicit formula for the number h in terms of simpler values which depend on the filed. Although this has not been accomplished for arbitrary algebraic number fields, for certain fields of great interest, such as quadratic fields, such formulas as been found.   

Since all divisors are products of prime divisors and the number of prime divisors is infinite, then to compute the number h in a finite number of steps we must use some infinite processes. This is why, in the determination of h, we shall have to consider infinite products, series and other analytic concepts.  

 

 

Notation: 

 

In the sequel of this work we shall use the following notation: 

 

 

  • Q the field of rational numbers;
 

 

 

  • Z  the ring of integer numbers.
 

 

 

 

Initialization 

 

 

Quadratic Fields 

 

A quadratic field is an algebraic number field K of degree two over Q. 

 

Any quadratic field has the form , where  and  . if and only if , where . Therefore any quadratic field has the form , where is a square-free integer that is uniquely determined by the field. When ,   is called a real and when an imaginary, quadratic field. 

 

Procedure Definition 

 

We give a procedure QuadraticField for writing the quadratic field for any integer (not necessarily square-free).  

Input datum is d (not necessarily square-free) an integer number

Output datum is the quadratic field determined by d.  

 









 

proc (`::`(d, integer)) local m, i, a; if `<`(0, d) then for i to d do if type(`/`(`*`(d), `*`(`^`(i, 2))), integer) = true then `assign`(a, `/`(`*`(d), `*`(`^`(i, 2)))) end if end do; print(`*`(''`*`...
proc (`::`(d, integer)) local m, i, a; if `<`(0, d) then for i to d do if type(`/`(`*`(d), `*`(`^`(i, 2))), integer) = true then `assign`(a, `/`(`*`(d), `*`(`^`(i, 2)))) end if end do; print(`*`(''`*`...
proc (`::`(d, integer)) local m, i, a; if `<`(0, d) then for i to d do if type(`/`(`*`(d), `*`(`^`(i, 2))), integer) = true then `assign`(a, `/`(`*`(d), `*`(`^`(i, 2)))) end if end do; print(`*`(''`*`...
proc (`::`(d, integer)) local m, i, a; if `<`(0, d) then for i to d do if type(`/`(`*`(d), `*`(`^`(i, 2))), integer) = true then `assign`(a, `/`(`*`(d), `*`(`^`(i, 2)))) end if end do; print(`*`(''`*`...
proc (`::`(d, integer)) local m, i, a; if `<`(0, d) then for i to d do if type(`/`(`*`(d), `*`(`^`(i, 2))), integer) = true then `assign`(a, `/`(`*`(d), `*`(`^`(i, 2)))) end if end do; print(`*`(''`*`...
proc (`::`(d, integer)) local m, i, a; if `<`(0, d) then for i to d do if type(`/`(`*`(d), `*`(`^`(i, 2))), integer) = true then `assign`(a, `/`(`*`(d), `*`(`^`(i, 2)))) end if end do; print(`*`(''`*`...
proc (`::`(d, integer)) local m, i, a; if `<`(0, d) then for i to d do if type(`/`(`*`(d), `*`(`^`(i, 2))), integer) = true then `assign`(a, `/`(`*`(d), `*`(`^`(i, 2)))) end if end do; print(`*`(''`*`...
proc (`::`(d, integer)) local m, i, a; if `<`(0, d) then for i to d do if type(`/`(`*`(d), `*`(`^`(i, 2))), integer) = true then `assign`(a, `/`(`*`(d), `*`(`^`(i, 2)))) end if end do; print(`*`(''`*`...
proc (`::`(d, integer)) local m, i, a; if `<`(0, d) then for i to d do if type(`/`(`*`(d), `*`(`^`(i, 2))), integer) = true then `assign`(a, `/`(`*`(d), `*`(`^`(i, 2)))) end if end do; print(`*`(''`*`...
proc (`::`(d, integer)) local m, i, a; if `<`(0, d) then for i to d do if type(`/`(`*`(d), `*`(`^`(i, 2))), integer) = true then `assign`(a, `/`(`*`(d), `*`(`^`(i, 2)))) end if end do; print(`*`(''`*`...
proc (`::`(d, integer)) local m, i, a; if `<`(0, d) then for i to d do if type(`/`(`*`(d), `*`(`^`(i, 2))), integer) = true then `assign`(a, `/`(`*`(d), `*`(`^`(i, 2)))) end if end do; print(`*`(''`*`...
proc (`::`(d, integer)) local m, i, a; if `<`(0, d) then for i to d do if type(`/`(`*`(d), `*`(`^`(i, 2))), integer) = true then `assign`(a, `/`(`*`(d), `*`(`^`(i, 2)))) end if end do; print(`*`(''`*`...
(3.1.1)
 

 

Examples 

 

`*`('`*`(The, `*`(quadratic, `*`(filed, `*`(is))))', `*`(Q(`*`(`^`(3, `/`(1, 2)))))) (3.2.1)
 

 

`*`('`*`(The, `*`(quadratic, `*`(filed, `*`(is))))', `*`(Q(`*`(I, `*`(`^`(3, `/`(1, 2))))))) (3.2.2)
 

 

Discriminant 

 

The discriminant of an algebraic number field is a numerical invariant that, loosely speaking, measures the size of the (ring of integers of the) algebraic number field. More specifically, it is related to the volume of the fundamental domain of the ring of integers, and it regulates which primes are ramified.The discriminant is one of the most basic invariants of a number field, and occurs in several important analytic formulas such as the functional equation of the Dedekind zeta function of K, and the analytic class number formula for K. An old theorem of Hermite states that there are only finitely many number fields of bounded discriminant, however determining this quantity is still an open problem, and the subject of current research. 

Let K be an algebraic number field, and let be its ring of integers. Let be an integral basis of (i.e. a basis as a Z-module), and let be the set of embeddings of K into the complex numbers (i.e. ring homomorphisms K→C). The discriminant of K is the square of the determinant of the n by n matrix B whose (i,j)-entry is .  

Procedure Definition 

 

The procedure DiscriminantQ computes the discriminant of

 

Input datum is d (not necessarily square-free) a integer number which defines

Output datum is the discriminant of

 

 









 

 

Examples 

 

21 (4.2.1)
 

 

-4 (4.2.2)
 

 

Ring of Integers of a Quadratic Field 

 

The ring of integers of an algebraic number field K, often denoted by , is the ring of algebraic integers contained in K. 

 

Procedure Definition 

 

We give a procedure RingInteger which compotes the ring of integers of

 

Input datum is d (not necessarily square-free) a integer number which defines

Output datum is the ring of integers of

 










 

proc (d) local m, i, a; if `<`(0, d) then for i to d do if type(`/`(`*`(d), `*`(`^`(i, 2))), integer) = true then `assign`(a, `/`(`*`(d), `*`(`^`(i, 2)))) end if end do end if; if `<`(d, 0) then `assi...
proc (d) local m, i, a; if `<`(0, d) then for i to d do if type(`/`(`*`(d), `*`(`^`(i, 2))), integer) = true then `assign`(a, `/`(`*`(d), `*`(`^`(i, 2)))) end if end do end if; if `<`(d, 0) then `assi...
proc (d) local m, i, a; if `<`(0, d) then for i to d do if type(`/`(`*`(d), `*`(`^`(i, 2))), integer) = true then `assign`(a, `/`(`*`(d), `*`(`^`(i, 2)))) end if end do end if; if `<`(d, 0) then `assi...
proc (d) local m, i, a; if `<`(0, d) then for i to d do if type(`/`(`*`(d), `*`(`^`(i, 2))), integer) = true then `assign`(a, `/`(`*`(d), `*`(`^`(i, 2)))) end if end do end if; if `<`(d, 0) then `assi...
proc (d) local m, i, a; if `<`(0, d) then for i to d do if type(`/`(`*`(d), `*`(`^`(i, 2))), integer) = true then `assign`(a, `/`(`*`(d), `*`(`^`(i, 2)))) end if end do end if; if `<`(d, 0) then `assi...
proc (d) local m, i, a; if `<`(0, d) then for i to d do if type(`/`(`*`(d), `*`(`^`(i, 2))), integer) = true then `assign`(a, `/`(`*`(d), `*`(`^`(i, 2)))) end if end do end if; if `<`(d, 0) then `assi...
proc (d) local m, i, a; if `<`(0, d) then for i to d do if type(`/`(`*`(d), `*`(`^`(i, 2))), integer) = true then `assign`(a, `/`(`*`(d), `*`(`^`(i, 2)))) end if end do end if; if `<`(d, 0) then `assi...
proc (d) local m, i, a; if `<`(0, d) then for i to d do if type(`/`(`*`(d), `*`(`^`(i, 2))), integer) = true then `assign`(a, `/`(`*`(d), `*`(`^`(i, 2)))) end if end do end if; if `<`(d, 0) then `assi...
proc (d) local m, i, a; if `<`(0, d) then for i to d do if type(`/`(`*`(d), `*`(`^`(i, 2))), integer) = true then `assign`(a, `/`(`*`(d), `*`(`^`(i, 2)))) end if end do end if; if `<`(d, 0) then `assi...
proc (d) local m, i, a; if `<`(0, d) then for i to d do if type(`/`(`*`(d), `*`(`^`(i, 2))), integer) = true then `assign`(a, `/`(`*`(d), `*`(`^`(i, 2)))) end if end do end if; if `<`(d, 0) then `assi...
proc (d) local m, i, a; if `<`(0, d) then for i to d do if type(`/`(`*`(d), `*`(`^`(i, 2))), integer) = true then `assign`(a, `/`(`*`(d), `*`(`^`(i, 2)))) end if end do end if; if `<`(d, 0) then `assi...
proc (d) local m, i, a; if `<`(0, d) then for i to d do if type(`/`(`*`(d), `*`(`^`(i, 2))), integer) = true then `assign`(a, `/`(`*`(d), `*`(`^`(i, 2)))) end if end do end if; if `<`(d, 0) then `assi...
proc (d) local m, i, a; if `<`(0, d) then for i to d do if type(`/`(`*`(d), `*`(`^`(i, 2))), integer) = true then `assign`(a, `/`(`*`(d), `*`(`^`(i, 2)))) end if end do end if; if `<`(d, 0) then `assi...
proc (d) local m, i, a; if `<`(0, d) then for i to d do if type(`/`(`*`(d), `*`(`^`(i, 2))), integer) = true then `assign`(a, `/`(`*`(d), `*`(`^`(i, 2)))) end if end do end if; if `<`(d, 0) then `assi...
proc (d) local m, i, a; if `<`(0, d) then for i to d do if type(`/`(`*`(d), `*`(`^`(i, 2))), integer) = true then `assign`(a, `/`(`*`(d), `*`(`^`(i, 2)))) end if end do end if; if `<`(d, 0) then `assi...
proc (d) local m, i, a; if `<`(0, d) then for i to d do if type(`/`(`*`(d), `*`(`^`(i, 2))), integer) = true then `assign`(a, `/`(`*`(d), `*`(`^`(i, 2)))) end if end do end if; if `<`(d, 0) then `assi...
proc (d) local m, i, a; if `<`(0, d) then for i to d do if type(`/`(`*`(d), `*`(`^`(i, 2))), integer) = true then `assign`(a, `/`(`*`(d), `*`(`^`(i, 2)))) end if end do end if; if `<`(d, 0) then `assi...
(5.1.1)
 

 

Examples 

 

`+`(`*`('`*`(The, `*`(integer, `*`(ring, `*`(of))))', `*`(Q(`*`(I, `*`(`^`(5, `/`(1, 2))))), `*`('is', `*`(Z)))), `*`(I, `*`(`^`(5, `/`(1, 2)), `*`(Z)))) (5.2.1)
 

 

`+`(`*`('`*`(The, `*`(integer, `*`(ring, `*`(of))))', `*`(Q(`*`(`^`(15, `/`(1, 2)))), `*`('is', `*`(Z)))), `*`(`^`(15, `/`(1, 2)), `*`(Z))) (5.2.2)
 

 

 

Fundamental Unit of a Real Quadratic Field 

 

The units of a number filed K are the invertible elements of the ring of integers. If is a real quadratic filed then the positive units form a multiplicative group which is isomorphic to Z. This group admits a generator >1; this generator is called fundamental unit of K

Let we recall that in the case of or the units of K are the natural integer solutions of the Pell-Fermat equation; thus if is the fundamental unit of K and we put then the sequence gives all the solutions of the Pell-Fermat equation. 

 

Procedure Definition 

 

We give a procedure FU which computes the fundamental unit of a real quadratic field. 

 

Input datum is d (not necessarily square-free) a positive integer number which defines

Output datum is the fundamental unit of

 

 



























 

proc (d) local b, m, i, a, FU; if `<`(0, d) then for i to d do if type(`/`(`*`(d), `*`(`^`(i, 2))), integer) = true then `assign`(a, `/`(`*`(d), `*`(`^`(i, 2)))) end if end do end if; if `<`(d, 0) the...
proc (d) local b, m, i, a, FU; if `<`(0, d) then for i to d do if type(`/`(`*`(d), `*`(`^`(i, 2))), integer) = true then `assign`(a, `/`(`*`(d), `*`(`^`(i, 2)))) end if end do end if; if `<`(d, 0) the...
proc (d) local b, m, i, a, FU; if `<`(0, d) then for i to d do if type(`/`(`*`(d), `*`(`^`(i, 2))), integer) = true then `assign`(a, `/`(`*`(d), `*`(`^`(i, 2)))) end if end do end if; if `<`(d, 0) the...
proc (d) local b, m, i, a, FU; if `<`(0, d) then for i to d do if type(`/`(`*`(d), `*`(`^`(i, 2))), integer) = true then `assign`(a, `/`(`*`(d), `*`(`^`(i, 2)))) end if end do end if; if `<`(d, 0) the...
proc (d) local b, m, i, a, FU; if `<`(0, d) then for i to d do if type(`/`(`*`(d), `*`(`^`(i, 2))), integer) = true then `assign`(a, `/`(`*`(d), `*`(`^`(i, 2)))) end if end do end if; if `<`(d, 0) the...
proc (d) local b, m, i, a, FU; if `<`(0, d) then for i to d do if type(`/`(`*`(d), `*`(`^`(i, 2))), integer) = true then `assign`(a, `/`(`*`(d), `*`(`^`(i, 2)))) end if end do end if; if `<`(d, 0) the...
proc (d) local b, m, i, a, FU; if `<`(0, d) then for i to d do if type(`/`(`*`(d), `*`(`^`(i, 2))), integer) = true then `assign`(a, `/`(`*`(d), `*`(`^`(i, 2)))) end if end do end if; if `<`(d, 0) the...
proc (d) local b, m, i, a, FU; if `<`(0, d) then for i to d do if type(`/`(`*`(d), `*`(`^`(i, 2))), integer) = true then `assign`(a, `/`(`*`(d), `*`(`^`(i, 2)))) end if end do end if; if `<`(d, 0) the...
proc (d) local b, m, i, a, FU; if `<`(0, d) then for i to d do if type(`/`(`*`(d), `*`(`^`(i, 2))), integer) = true then `assign`(a, `/`(`*`(d), `*`(`^`(i, 2)))) end if end do end if; if `<`(d, 0) the...
proc (d) local b, m, i, a, FU; if `<`(0, d) then for i to d do if type(`/`(`*`(d), `*`(`^`(i, 2))), integer) = true then `assign`(a, `/`(`*`(d), `*`(`^`(i, 2)))) end if end do end if; if `<`(d, 0) the...
proc (d) local b, m, i, a, FU; if `<`(0, d) then for i to d do if type(`/`(`*`(d), `*`(`^`(i, 2))), integer) = true then `assign`(a, `/`(`*`(d), `*`(`^`(i, 2)))) end if end do end if; if `<`(d, 0) the...
proc (d) local b, m, i, a, FU; if `<`(0, d) then for i to d do if type(`/`(`*`(d), `*`(`^`(i, 2))), integer) = true then `assign`(a, `/`(`*`(d), `*`(`^`(i, 2)))) end if end do end if; if `<`(d, 0) the...
proc (d) local b, m, i, a, FU; if `<`(0, d) then for i to d do if type(`/`(`*`(d), `*`(`^`(i, 2))), integer) = true then `assign`(a, `/`(`*`(d), `*`(`^`(i, 2)))) end if end do end if; if `<`(d, 0) the...
proc (d) local b, m, i, a, FU; if `<`(0, d) then for i to d do if type(`/`(`*`(d), `*`(`^`(i, 2))), integer) = true then `assign`(a, `/`(`*`(d), `*`(`^`(i, 2)))) end if end do end if; if `<`(d, 0) the...
proc (d) local b, m, i, a, FU; if `<`(0, d) then for i to d do if type(`/`(`*`(d), `*`(`^`(i, 2))), integer) = true then `assign`(a, `/`(`*`(d), `*`(`^`(i, 2)))) end if end do end if; if `<`(d, 0) the...
proc (d) local b, m, i, a, FU; if `<`(0, d) then for i to d do if type(`/`(`*`(d), `*`(`^`(i, 2))), integer) = true then `assign`(a, `/`(`*`(d), `*`(`^`(i, 2)))) end if end do end if; if `<`(d, 0) the...
proc (d) local b, m, i, a, FU; if `<`(0, d) then for i to d do if type(`/`(`*`(d), `*`(`^`(i, 2))), integer) = true then `assign`(a, `/`(`*`(d), `*`(`^`(i, 2)))) end if end do end if; if `<`(d, 0) the...
proc (d) local b, m, i, a, FU; if `<`(0, d) then for i to d do if type(`/`(`*`(d), `*`(`^`(i, 2))), integer) = true then `assign`(a, `/`(`*`(d), `*`(`^`(i, 2)))) end if end do end if; if `<`(d, 0) the...
proc (d) local b, m, i, a, FU; if `<`(0, d) then for i to d do if type(`/`(`*`(d), `*`(`^`(i, 2))), integer) = true then `assign`(a, `/`(`*`(d), `*`(`^`(i, 2)))) end if end do end if; if `<`(d, 0) the...
proc (d) local b, m, i, a, FU; if `<`(0, d) then for i to d do if type(`/`(`*`(d), `*`(`^`(i, 2))), integer) = true then `assign`(a, `/`(`*`(d), `*`(`^`(i, 2)))) end if end do end if; if `<`(d, 0) the...
proc (d) local b, m, i, a, FU; if `<`(0, d) then for i to d do if type(`/`(`*`(d), `*`(`^`(i, 2))), integer) = true then `assign`(a, `/`(`*`(d), `*`(`^`(i, 2)))) end if end do end if; if `<`(d, 0) the...
proc (d) local b, m, i, a, FU; if `<`(0, d) then for i to d do if type(`/`(`*`(d), `*`(`^`(i, 2))), integer) = true then `assign`(a, `/`(`*`(d), `*`(`^`(i, 2)))) end if end do end if; if `<`(d, 0) the...
proc (d) local b, m, i, a, FU; if `<`(0, d) then for i to d do if type(`/`(`*`(d), `*`(`^`(i, 2))), integer) = true then `assign`(a, `/`(`*`(d), `*`(`^`(i, 2)))) end if end do end if; if `<`(d, 0) the...
proc (d) local b, m, i, a, FU; if `<`(0, d) then for i to d do if type(`/`(`*`(d), `*`(`^`(i, 2))), integer) = true then `assign`(a, `/`(`*`(d), `*`(`^`(i, 2)))) end if end do end if; if `<`(d, 0) the...
proc (d) local b, m, i, a, FU; if `<`(0, d) then for i to d do if type(`/`(`*`(d), `*`(`^`(i, 2))), integer) = true then `assign`(a, `/`(`*`(d), `*`(`^`(i, 2)))) end if end do end if; if `<`(d, 0) the...
proc (d) local b, m, i, a, FU; if `<`(0, d) then for i to d do if type(`/`(`*`(d), `*`(`^`(i, 2))), integer) = true then `assign`(a, `/`(`*`(d), `*`(`^`(i, 2)))) end if end do end if; if `<`(d, 0) the...
proc (d) local b, m, i, a, FU; if `<`(0, d) then for i to d do if type(`/`(`*`(d), `*`(`^`(i, 2))), integer) = true then `assign`(a, `/`(`*`(d), `*`(`^`(i, 2)))) end if end do end if; if `<`(d, 0) the...
proc (d) local b, m, i, a, FU; if `<`(0, d) then for i to d do if type(`/`(`*`(d), `*`(`^`(i, 2))), integer) = true then `assign`(a, `/`(`*`(d), `*`(`^`(i, 2)))) end if end do end if; if `<`(d, 0) the...
proc (d) local b, m, i, a, FU; if `<`(0, d) then for i to d do if type(`/`(`*`(d), `*`(`^`(i, 2))), integer) = true then `assign`(a, `/`(`*`(d), `*`(`^`(i, 2)))) end if end do end if; if `<`(d, 0) the...
proc (d) local b, m, i, a, FU; if `<`(0, d) then for i to d do if type(`/`(`*`(d), `*`(`^`(i, 2))), integer) = true then `assign`(a, `/`(`*`(d), `*`(`^`(i, 2)))) end if end do end if; if `<`(d, 0) the...
proc (d) local b, m, i, a, FU; if `<`(0, d) then for i to d do if type(`/`(`*`(d), `*`(`^`(i, 2))), integer) = true then `assign`(a, `/`(`*`(d), `*`(`^`(i, 2)))) end if end do end if; if `<`(d, 0) the...
proc (d) local b, m, i, a, FU; if `<`(0, d) then for i to d do if type(`/`(`*`(d), `*`(`^`(i, 2))), integer) = true then `assign`(a, `/`(`*`(d), `*`(`^`(i, 2)))) end if end do end if; if `<`(d, 0) the...
proc (d) local b, m, i, a, FU; if `<`(0, d) then for i to d do if type(`/`(`*`(d), `*`(`^`(i, 2))), integer) = true then `assign`(a, `/`(`*`(d), `*`(`^`(i, 2)))) end if end do end if; if `<`(d, 0) the...
proc (d) local b, m, i, a, FU; if `<`(0, d) then for i to d do if type(`/`(`*`(d), `*`(`^`(i, 2))), integer) = true then `assign`(a, `/`(`*`(d), `*`(`^`(i, 2)))) end if end do end if; if `<`(d, 0) the...
proc (d) local b, m, i, a, FU; if `<`(0, d) then for i to d do if type(`/`(`*`(d), `*`(`^`(i, 2))), integer) = true then `assign`(a, `/`(`*`(d), `*`(`^`(i, 2)))) end if end do end if; if `<`(d, 0) the...
proc (d) local b, m, i, a, FU; if `<`(0, d) then for i to d do if type(`/`(`*`(d), `*`(`^`(i, 2))), integer) = true then `assign`(a, `/`(`*`(d), `*`(`^`(i, 2)))) end if end do end if; if `<`(d, 0) the...
proc (d) local b, m, i, a, FU; if `<`(0, d) then for i to d do if type(`/`(`*`(d), `*`(`^`(i, 2))), integer) = true then `assign`(a, `/`(`*`(d), `*`(`^`(i, 2)))) end if end do end if; if `<`(d, 0) the...
proc (d) local b, m, i, a, FU; if `<`(0, d) then for i to d do if type(`/`(`*`(d), `*`(`^`(i, 2))), integer) = true then `assign`(a, `/`(`*`(d), `*`(`^`(i, 2)))) end if end do end if; if `<`(d, 0) the...
proc (d) local b, m, i, a, FU; if `<`(0, d) then for i to d do if type(`/`(`*`(d), `*`(`^`(i, 2))), integer) = true then `assign`(a, `/`(`*`(d), `*`(`^`(i, 2)))) end if end do end if; if `<`(d, 0) the...
proc (d) local b, m, i, a, FU; if `<`(0, d) then for i to d do if type(`/`(`*`(d), `*`(`^`(i, 2))), integer) = true then `assign`(a, `/`(`*`(d), `*`(`^`(i, 2)))) end if end do end if; if `<`(d, 0) the...
proc (d) local b, m, i, a, FU; if `<`(0, d) then for i to d do if type(`/`(`*`(d), `*`(`^`(i, 2))), integer) = true then `assign`(a, `/`(`*`(d), `*`(`^`(i, 2)))) end if end do end if; if `<`(d, 0) the...
proc (d) local b, m, i, a, FU; if `<`(0, d) then for i to d do if type(`/`(`*`(d), `*`(`^`(i, 2))), integer) = true then `assign`(a, `/`(`*`(d), `*`(`^`(i, 2)))) end if end do end if; if `<`(d, 0) the...
proc (d) local b, m, i, a, FU; if `<`(0, d) then for i to d do if type(`/`(`*`(d), `*`(`^`(i, 2))), integer) = true then `assign`(a, `/`(`*`(d), `*`(`^`(i, 2)))) end if end do end if; if `<`(d, 0) the...
proc (d) local b, m, i, a, FU; if `<`(0, d) then for i to d do if type(`/`(`*`(d), `*`(`^`(i, 2))), integer) = true then `assign`(a, `/`(`*`(d), `*`(`^`(i, 2)))) end if end do end if; if `<`(d, 0) the...
proc (d) local b, m, i, a, FU; if `<`(0, d) then for i to d do if type(`/`(`*`(d), `*`(`^`(i, 2))), integer) = true then `assign`(a, `/`(`*`(d), `*`(`^`(i, 2)))) end if end do end if; if `<`(d, 0) the...
proc (d) local b, m, i, a, FU; if `<`(0, d) then for i to d do if type(`/`(`*`(d), `*`(`^`(i, 2))), integer) = true then `assign`(a, `/`(`*`(d), `*`(`^`(i, 2)))) end if end do end if; if `<`(d, 0) the...
proc (d) local b, m, i, a, FU; if `<`(0, d) then for i to d do if type(`/`(`*`(d), `*`(`^`(i, 2))), integer) = true then `assign`(a, `/`(`*`(d), `*`(`^`(i, 2)))) end if end do end if; if `<`(d, 0) the...
proc (d) local b, m, i, a, FU; if `<`(0, d) then for i to d do if type(`/`(`*`(d), `*`(`^`(i, 2))), integer) = true then `assign`(a, `/`(`*`(d), `*`(`^`(i, 2)))) end if end do end if; if `<`(d, 0) the...
(6.1.1)
 

 

Examples 

 

`+`(23, `*`(4, `*`(`^`(33, `/`(1, 2))))) (6.2.1)
 

 

`+`(23, `*`(4, `*`(`^`(33, `/`(1, 2))))) (6.2.2)
 

 

Decomposition of primes in Quadratic Fields 

 

Any prime number p gives rise to an ideal in the ring of integers  of a quadratic field K. In line with general theory of splitting of prime ideals in Galois extensions, this may be:p is inert :(p) is a prime ideal; the quotient ring is the finite field with  elements: /p =. p splits :(p) is a product of two distinct prime ideals of ; the quotient ring is the product /p =. p is ramified :(p) is the square of a prime ideal of ; the quotient ring contains non-zero nilpotent elements. The third case happens if and only if p divides the discriminant D. The first and second cases occur when the Kronecker symbol equals -1 and +1, respectively. The first two cases are in a certain sense equally likely to occur as p runs through the primes, see Chebotarev density theorem.The law of quadratic reciprocity implies that the splitting behaviour of a prime p in a quadratic field depends only on p modulo D, where D is the field discriminant. 

 

Procedure Definition 

 

We give a procedure Dec which returns how each rational prime p factors as a product of prime divisors in

 

Input data are d (not necessarily square-free) a positive integer number which defines and p a prime number. 

Output datum is the decomposition of the prime p in

 

 
















 

proc (d, p) local m, i, a; if `<`(0, d) then for i to d do if type(`/`(`*`(d), `*`(`^`(i, 2))), integer) = true then `assign`(a, `/`(`*`(d), `*`(`^`(i, 2)))) end if end do end if; if `<`(d, 0) then `a...
proc (d, p) local m, i, a; if `<`(0, d) then for i to d do if type(`/`(`*`(d), `*`(`^`(i, 2))), integer) = true then `assign`(a, `/`(`*`(d), `*`(`^`(i, 2)))) end if end do end if; if `<`(d, 0) then `a...
proc (d, p) local m, i, a; if `<`(0, d) then for i to d do if type(`/`(`*`(d), `*`(`^`(i, 2))), integer) = true then `assign`(a, `/`(`*`(d), `*`(`^`(i, 2)))) end if end do end if; if `<`(d, 0) then `a...
proc (d, p) local m, i, a; if `<`(0, d) then for i to d do if type(`/`(`*`(d), `*`(`^`(i, 2))), integer) = true then `assign`(a, `/`(`*`(d), `*`(`^`(i, 2)))) end if end do end if; if `<`(d, 0) then `a...
proc (d, p) local m, i, a; if `<`(0, d) then for i to d do if type(`/`(`*`(d), `*`(`^`(i, 2))), integer) = true then `assign`(a, `/`(`*`(d), `*`(`^`(i, 2)))) end if end do end if; if `<`(d, 0) then `a...
proc (d, p) local m, i, a; if `<`(0, d) then for i to d do if type(`/`(`*`(d), `*`(`^`(i, 2))), integer) = true then `assign`(a, `/`(`*`(d), `*`(`^`(i, 2)))) end if end do end if; if `<`(d, 0) then `a...
proc (d, p) local m, i, a; if `<`(0, d) then for i to d do if type(`/`(`*`(d), `*`(`^`(i, 2))), integer) = true then `assign`(a, `/`(`*`(d), `*`(`^`(i, 2)))) end if end do end if; if `<`(d, 0) then `a...
proc (d, p) local m, i, a; if `<`(0, d) then for i to d do if type(`/`(`*`(d), `*`(`^`(i, 2))), integer) = true then `assign`(a, `/`(`*`(d), `*`(`^`(i, 2)))) end if end do end if; if `<`(d, 0) then `a...
proc (d, p) local m, i, a; if `<`(0, d) then for i to d do if type(`/`(`*`(d), `*`(`^`(i, 2))), integer) = true then `assign`(a, `/`(`*`(d), `*`(`^`(i, 2)))) end if end do end if; if `<`(d, 0) then `a...
proc (d, p) local m, i, a; if `<`(0, d) then for i to d do if type(`/`(`*`(d), `*`(`^`(i, 2))), integer) = true then `assign`(a, `/`(`*`(d), `*`(`^`(i, 2)))) end if end do end if; if `<`(d, 0) then `a...
proc (d, p) local m, i, a; if `<`(0, d) then for i to d do if type(`/`(`*`(d), `*`(`^`(i, 2))), integer) = true then `assign`(a, `/`(`*`(d), `*`(`^`(i, 2)))) end if end do end if; if `<`(d, 0) then `a...
proc (d, p) local m, i, a; if `<`(0, d) then for i to d do if type(`/`(`*`(d), `*`(`^`(i, 2))), integer) = true then `assign`(a, `/`(`*`(d), `*`(`^`(i, 2)))) end if end do end if; if `<`(d, 0) then `a...
proc (d, p) local m, i, a; if `<`(0, d) then for i to d do if type(`/`(`*`(d), `*`(`^`(i, 2))), integer) = true then `assign`(a, `/`(`*`(d), `*`(`^`(i, 2)))) end if end do end if; if `<`(d, 0) then `a...
proc (d, p) local m, i, a; if `<`(0, d) then for i to d do if type(`/`(`*`(d), `*`(`^`(i, 2))), integer) = true then `assign`(a, `/`(`*`(d), `*`(`^`(i, 2)))) end if end do end if; if `<`(d, 0) then `a...
proc (d, p) local m, i, a; if `<`(0, d) then for i to d do if type(`/`(`*`(d), `*`(`^`(i, 2))), integer) = true then `assign`(a, `/`(`*`(d), `*`(`^`(i, 2)))) end if end do end if; if `<`(d, 0) then `a...
proc (d, p) local m, i, a; if `<`(0, d) then for i to d do if type(`/`(`*`(d), `*`(`^`(i, 2))), integer) = true then `assign`(a, `/`(`*`(d), `*`(`^`(i, 2)))) end if end do end if; if `<`(d, 0) then `a...
proc (d, p) local m, i, a; if `<`(0, d) then for i to d do if type(`/`(`*`(d), `*`(`^`(i, 2))), integer) = true then `assign`(a, `/`(`*`(d), `*`(`^`(i, 2)))) end if end do end if; if `<`(d, 0) then `a...
proc (d, p) local m, i, a; if `<`(0, d) then for i to d do if type(`/`(`*`(d), `*`(`^`(i, 2))), integer) = true then `assign`(a, `/`(`*`(d), `*`(`^`(i, 2)))) end if end do end if; if `<`(d, 0) then `a...
proc (d, p) local m, i, a; if `<`(0, d) then for i to d do if type(`/`(`*`(d), `*`(`^`(i, 2))), integer) = true then `assign`(a, `/`(`*`(d), `*`(`^`(i, 2)))) end if end do end if; if `<`(d, 0) then `a...
proc (d, p) local m, i, a; if `<`(0, d) then for i to d do if type(`/`(`*`(d), `*`(`^`(i, 2))), integer) = true then `assign`(a, `/`(`*`(d), `*`(`^`(i, 2)))) end if end do end if; if `<`(d, 0) then `a...
proc (d, p) local m, i, a; if `<`(0, d) then for i to d do if type(`/`(`*`(d), `*`(`^`(i, 2))), integer) = true then `assign`(a, `/`(`*`(d), `*`(`^`(i, 2)))) end if end do end if; if `<`(d, 0) then `a...
(7.1.1)
 

 

Examples 

 

The prime p is inert (7.2.1)
 

 

The prime p is ramified (7.2.2)
 

 

 

Dirichlet Character of a Quadratic Field 

 

The type of decomposition of a prime number p depends only on its residue modulo |D| , so that all prime numbers having the same residue have the same decomposition. The Dirichlet character χ of the filed makes this form of the decomposition rule more clear. 

The character χ is a Dirichlet character modulo |D| where D is the discriminant of the filed and the decomposition of a prime p in is given the conditions: 

 

  • if  ;
 

 

 

  • if  ;
 

 

 

  • if  
 

 

 

This character is fundamental for the computation of the class number of

 

Procedure Definition 

 

We now give a procedure Car which gives the Dirichlet character χ of the filed .  

Note that Car  procedure needs DiscriminantQ procedure to be clicked. 

Input data are d (not necessarily square-free) a positive integer number which defines and x an integer number. 

Output datum is the value

 

`assign`(Car, proc (d, x) local m, i, a, Car; if `<`(0, d) then for i to d do if type(`/`(`*`(d), `*`(`^`(i, 2))), integer) = true then `assign`(a, `/`(`*`(d), `*`(`^`(i, 2)))) end if end do end if; i...
`assign`(Car, proc (d, x) local m, i, a, Car; if `<`(0, d) then for i to d do if type(`/`(`*`(d), `*`(`^`(i, 2))), integer) = true then `assign`(a, `/`(`*`(d), `*`(`^`(i, 2)))) end if end do end if; i...
`assign`(Car, proc (d, x) local m, i, a, Car; if `<`(0, d) then for i to d do if type(`/`(`*`(d), `*`(`^`(i, 2))), integer) = true then `assign`(a, `/`(`*`(d), `*`(`^`(i, 2)))) end if end do end if; i...
`assign`(Car, proc (d, x) local m, i, a, Car; if `<`(0, d) then for i to d do if type(`/`(`*`(d), `*`(`^`(i, 2))), integer) = true then `assign`(a, `/`(`*`(d), `*`(`^`(i, 2)))) end if end do end if; i...
`assign`(Car, proc (d, x) local m, i, a, Car; if `<`(0, d) then for i to d do if type(`/`(`*`(d), `*`(`^`(i, 2))), integer) = true then `assign`(a, `/`(`*`(d), `*`(`^`(i, 2)))) end if end do end if; i...
`assign`(Car, proc (d, x) local m, i, a, Car; if `<`(0, d) then for i to d do if type(`/`(`*`(d), `*`(`^`(i, 2))), integer) = true then `assign`(a, `/`(`*`(d), `*`(`^`(i, 2)))) end if end do end if; i...
`assign`(Car, proc (d, x) local m, i, a, Car; if `<`(0, d) then for i to d do if type(`/`(`*`(d), `*`(`^`(i, 2))), integer) = true then `assign`(a, `/`(`*`(d), `*`(`^`(i, 2)))) end if end do end if; i...
`assign`(Car, proc (d, x) local m, i, a, Car; if `<`(0, d) then for i to d do if type(`/`(`*`(d), `*`(`^`(i, 2))), integer) = true then `assign`(a, `/`(`*`(d), `*`(`^`(i, 2)))) end if end do end if; i...
`assign`(Car, proc (d, x) local m, i, a, Car; if `<`(0, d) then for i to d do if type(`/`(`*`(d), `*`(`^`(i, 2))), integer) = true then `assign`(a, `/`(`*`(d), `*`(`^`(i, 2)))) end if end do end if; i...
`assign`(Car, proc (d, x) local m, i, a, Car; if `<`(0, d) then for i to d do if type(`/`(`*`(d), `*`(`^`(i, 2))), integer) = true then `assign`(a, `/`(`*`(d), `*`(`^`(i, 2)))) end if end do end if; i...
`assign`(Car, proc (d, x) local m, i, a, Car; if `<`(0, d) then for i to d do if type(`/`(`*`(d), `*`(`^`(i, 2))), integer) = true then `assign`(a, `/`(`*`(d), `*`(`^`(i, 2)))) end if end do end if; i...
`assign`(Car, proc (d, x) local m, i, a, Car; if `<`(0, d) then for i to d do if type(`/`(`*`(d), `*`(`^`(i, 2))), integer) = true then `assign`(a, `/`(`*`(d), `*`(`^`(i, 2)))) end if end do end if; i...
`assign`(Car, proc (d, x) local m, i, a, Car; if `<`(0, d) then for i to d do if type(`/`(`*`(d), `*`(`^`(i, 2))), integer) = true then `assign`(a, `/`(`*`(d), `*`(`^`(i, 2)))) end if end do end if; i...
`assign`(Car, proc (d, x) local m, i, a, Car; if `<`(0, d) then for i to d do if type(`/`(`*`(d), `*`(`^`(i, 2))), integer) = true then `assign`(a, `/`(`*`(d), `*`(`^`(i, 2)))) end if end do end if; i...
`assign`(Car, proc (d, x) local m, i, a, Car; if `<`(0, d) then for i to d do if type(`/`(`*`(d), `*`(`^`(i, 2))), integer) = true then `assign`(a, `/`(`*`(d), `*`(`^`(i, 2)))) end if end do end if; i...
 

proc (d, x) local m, i, a, Car; if `<`(0, d) then for i to d do if type(`/`(`*`(d), `*`(`^`(i, 2))), integer) = true then `assign`(a, `/`(`*`(d), `*`(`^`(i, 2)))) end if end do end if; if `<`(d, 0) th...
proc (d, x) local m, i, a, Car; if `<`(0, d) then for i to d do if type(`/`(`*`(d), `*`(`^`(i, 2))), integer) = true then `assign`(a, `/`(`*`(d), `*`(`^`(i, 2)))) end if end do end if; if `<`(d, 0) th...
proc (d, x) local m, i, a, Car; if `<`(0, d) then for i to d do if type(`/`(`*`(d), `*`(`^`(i, 2))), integer) = true then `assign`(a, `/`(`*`(d), `*`(`^`(i, 2)))) end if end do end if; if `<`(d, 0) th...
proc (d, x) local m, i, a, Car; if `<`(0, d) then for i to d do if type(`/`(`*`(d), `*`(`^`(i, 2))), integer) = true then `assign`(a, `/`(`*`(d), `*`(`^`(i, 2)))) end if end do end if; if `<`(d, 0) th...
proc (d, x) local m, i, a, Car; if `<`(0, d) then for i to d do if type(`/`(`*`(d), `*`(`^`(i, 2))), integer) = true then `assign`(a, `/`(`*`(d), `*`(`^`(i, 2)))) end if end do end if; if `<`(d, 0) th...
proc (d, x) local m, i, a, Car; if `<`(0, d) then for i to d do if type(`/`(`*`(d), `*`(`^`(i, 2))), integer) = true then `assign`(a, `/`(`*`(d), `*`(`^`(i, 2)))) end if end do end if; if `<`(d, 0) th...
proc (d, x) local m, i, a, Car; if `<`(0, d) then for i to d do if type(`/`(`*`(d), `*`(`^`(i, 2))), integer) = true then `assign`(a, `/`(`*`(d), `*`(`^`(i, 2)))) end if end do end if; if `<`(d, 0) th...
proc (d, x) local m, i, a, Car; if `<`(0, d) then for i to d do if type(`/`(`*`(d), `*`(`^`(i, 2))), integer) = true then `assign`(a, `/`(`*`(d), `*`(`^`(i, 2)))) end if end do end if; if `<`(d, 0) th...
proc (d, x) local m, i, a, Car; if `<`(0, d) then for i to d do if type(`/`(`*`(d), `*`(`^`(i, 2))), integer) = true then `assign`(a, `/`(`*`(d), `*`(`^`(i, 2)))) end if end do end if; if `<`(d, 0) th...
proc (d, x) local m, i, a, Car; if `<`(0, d) then for i to d do if type(`/`(`*`(d), `*`(`^`(i, 2))), integer) = true then `assign`(a, `/`(`*`(d), `*`(`^`(i, 2)))) end if end do end if; if `<`(d, 0) th...
proc (d, x) local m, i, a, Car; if `<`(0, d) then for i to d do if type(`/`(`*`(d), `*`(`^`(i, 2))), integer) = true then `assign`(a, `/`(`*`(d), `*`(`^`(i, 2)))) end if end do end if; if `<`(d, 0) th...
proc (d, x) local m, i, a, Car; if `<`(0, d) then for i to d do if type(`/`(`*`(d), `*`(`^`(i, 2))), integer) = true then `assign`(a, `/`(`*`(d), `*`(`^`(i, 2)))) end if end do end if; if `<`(d, 0) th...
proc (d, x) local m, i, a, Car; if `<`(0, d) then for i to d do if type(`/`(`*`(d), `*`(`^`(i, 2))), integer) = true then `assign`(a, `/`(`*`(d), `*`(`^`(i, 2)))) end if end do end if; if `<`(d, 0) th...
proc (d, x) local m, i, a, Car; if `<`(0, d) then for i to d do if type(`/`(`*`(d), `*`(`^`(i, 2))), integer) = true then `assign`(a, `/`(`*`(d), `*`(`^`(i, 2)))) end if end do end if; if `<`(d, 0) th...
proc (d, x) local m, i, a, Car; if `<`(0, d) then for i to d do if type(`/`(`*`(d), `*`(`^`(i, 2))), integer) = true then `assign`(a, `/`(`*`(d), `*`(`^`(i, 2)))) end if end do end if; if `<`(d, 0) th...
proc (d, x) local m, i, a, Car; if `<`(0, d) then for i to d do if type(`/`(`*`(d), `*`(`^`(i, 2))), integer) = true then `assign`(a, `/`(`*`(d), `*`(`^`(i, 2)))) end if end do end if; if `<`(d, 0) th...
proc (d, x) local m, i, a, Car; if `<`(0, d) then for i to d do if type(`/`(`*`(d), `*`(`^`(i, 2))), integer) = true then `assign`(a, `/`(`*`(d), `*`(`^`(i, 2)))) end if end do end if; if `<`(d, 0) th...
proc (d, x) local m, i, a, Car; if `<`(0, d) then for i to d do if type(`/`(`*`(d), `*`(`^`(i, 2))), integer) = true then `assign`(a, `/`(`*`(d), `*`(`^`(i, 2)))) end if end do end if; if `<`(d, 0) th...
proc (d, x) local m, i, a, Car; if `<`(0, d) then for i to d do if type(`/`(`*`(d), `*`(`^`(i, 2))), integer) = true then `assign`(a, `/`(`*`(d), `*`(`^`(i, 2)))) end if end do end if; if `<`(d, 0) th...
proc (d, x) local m, i, a, Car; if `<`(0, d) then for i to d do if type(`/`(`*`(d), `*`(`^`(i, 2))), integer) = true then `assign`(a, `/`(`*`(d), `*`(`^`(i, 2)))) end if end do end if; if `<`(d, 0) th...
proc (d, x) local m, i, a, Car; if `<`(0, d) then for i to d do if type(`/`(`*`(d), `*`(`^`(i, 2))), integer) = true then `assign`(a, `/`(`*`(d), `*`(`^`(i, 2)))) end if end do end if; if `<`(d, 0) th...
proc (d, x) local m, i, a, Car; if `<`(0, d) then for i to d do if type(`/`(`*`(d), `*`(`^`(i, 2))), integer) = true then `assign`(a, `/`(`*`(d), `*`(`^`(i, 2)))) end if end do end if; if `<`(d, 0) th...
proc (d, x) local m, i, a, Car; if `<`(0, d) then for i to d do if type(`/`(`*`(d), `*`(`^`(i, 2))), integer) = true then `assign`(a, `/`(`*`(d), `*`(`^`(i, 2)))) end if end do end if; if `<`(d, 0) th...
(8.1.1)
 

 

Examples 

Car(15, 3) 

0 (8.2.1)
 

Car(21, 4) 

1 (8.2.2)
 

 

Class Number for Quadratic Fields 

 

In mathematics, the extent to which unique factorization fails in the ring of integers of an algebraic number field (or more generally any Dedekind domain) can be described by a certain group known as an ideal class group (or class group). If this group is finite, (as it is in the case of the ring of integers of a number field) then the order of the group is called the class number. The multiplicative theory of a Dedekind domain is intimately tied to the structure of its class group. For example, the class group of a Dedekind domain is trivial if and only if the ring is a unique factorization domain.Let be the an algebraic number field; let be the group of the fractional ideals of K and H be the group of the principal fractional ideals of K. Then and the class number is

 

The computation of the class number is closely related to the Dedekind zeta function of K, in particular it is related to the residue in of . If K  is a quadratic field, the Dedekind zeta function is the product where is the zeta Riemann function and is the Dirichlet L function. Thus the number h is related to the value of which can be explicitely computed. 

 

Procedure Definition 

 

We give a procedure ClassNumber which computes the class number of .  

This procedure needs the DiscriminantQ, Car, FU procedure to be clicked. 

 

Input datum is d (not necessarily square-free) a positive integer number which defines

Output datum is the class number of   

 

 





















 

proc (d) local h, x, a, i, m; if `<`(0, d) then for i to d do if type(`/`(`*`(d), `*`(`^`(i, 2))), integer) = true then `assign`(a, `/`(`*`(d), `*`(`^`(i, 2)))) end if end do end if; if `<`(d, 0) then...
proc (d) local h, x, a, i, m; if `<`(0, d) then for i to d do if type(`/`(`*`(d), `*`(`^`(i, 2))), integer) = true then `assign`(a, `/`(`*`(d), `*`(`^`(i, 2)))) end if end do end if; if `<`(d, 0) then...
proc (d) local h, x, a, i, m; if `<`(0, d) then for i to d do if type(`/`(`*`(d), `*`(`^`(i, 2))), integer) = true then `assign`(a, `/`(`*`(d), `*`(`^`(i, 2)))) end if end do end if; if `<`(d, 0) then...
proc (d) local h, x, a, i, m; if `<`(0, d) then for i to d do if type(`/`(`*`(d), `*`(`^`(i, 2))), integer) = true then `assign`(a, `/`(`*`(d), `*`(`^`(i, 2)))) end if end do end if; if `<`(d, 0) then...
proc (d) local h, x, a, i, m; if `<`(0, d) then for i to d do if type(`/`(`*`(d), `*`(`^`(i, 2))), integer) = true then `assign`(a, `/`(`*`(d), `*`(`^`(i, 2)))) end if end do end if; if `<`(d, 0) then...
proc (d) local h, x, a, i, m; if `<`(0, d) then for i to d do if type(`/`(`*`(d), `*`(`^`(i, 2))), integer) = true then `assign`(a, `/`(`*`(d), `*`(`^`(i, 2)))) end if end do end if; if `<`(d, 0) then...
proc (d) local h, x, a, i, m; if `<`(0, d) then for i to d do if type(`/`(`*`(d), `*`(`^`(i, 2))), integer) = true then `assign`(a, `/`(`*`(d), `*`(`^`(i, 2)))) end if end do end if; if `<`(d, 0) then...
proc (d) local h, x, a, i, m; if `<`(0, d) then for i to d do if type(`/`(`*`(d), `*`(`^`(i, 2))), integer) = true then `assign`(a, `/`(`*`(d), `*`(`^`(i, 2)))) end if end do end if; if `<`(d, 0) then...
proc (d) local h, x, a, i, m; if `<`(0, d) then for i to d do if type(`/`(`*`(d), `*`(`^`(i, 2))), integer) = true then `assign`(a, `/`(`*`(d), `*`(`^`(i, 2)))) end if end do end if; if `<`(d, 0) then...
proc (d) local h, x, a, i, m; if `<`(0, d) then for i to d do if type(`/`(`*`(d), `*`(`^`(i, 2))), integer) = true then `assign`(a, `/`(`*`(d), `*`(`^`(i, 2)))) end if end do end if; if `<`(d, 0) then...
proc (d) local h, x, a, i, m; if `<`(0, d) then for i to d do if type(`/`(`*`(d), `*`(`^`(i, 2))), integer) = true then `assign`(a, `/`(`*`(d), `*`(`^`(i, 2)))) end if end do end if; if `<`(d, 0) then...
proc (d) local h, x, a, i, m; if `<`(0, d) then for i to d do if type(`/`(`*`(d), `*`(`^`(i, 2))), integer) = true then `assign`(a, `/`(`*`(d), `*`(`^`(i, 2)))) end if end do end if; if `<`(d, 0) then...
proc (d) local h, x, a, i, m; if `<`(0, d) then for i to d do if type(`/`(`*`(d), `*`(`^`(i, 2))), integer) = true then `assign`(a, `/`(`*`(d), `*`(`^`(i, 2)))) end if end do end if; if `<`(d, 0) then...
proc (d) local h, x, a, i, m; if `<`(0, d) then for i to d do if type(`/`(`*`(d), `*`(`^`(i, 2))), integer) = true then `assign`(a, `/`(`*`(d), `*`(`^`(i, 2)))) end if end do end if; if `<`(d, 0) then...
proc (d) local h, x, a, i, m; if `<`(0, d) then for i to d do if type(`/`(`*`(d), `*`(`^`(i, 2))), integer) = true then `assign`(a, `/`(`*`(d), `*`(`^`(i, 2)))) end if end do end if; if `<`(d, 0) then...
proc (d) local h, x, a, i, m; if `<`(0, d) then for i to d do if type(`/`(`*`(d), `*`(`^`(i, 2))), integer) = true then `assign`(a, `/`(`*`(d), `*`(`^`(i, 2)))) end if end do end if; if `<`(d, 0) then...
proc (d) local h, x, a, i, m; if `<`(0, d) then for i to d do if type(`/`(`*`(d), `*`(`^`(i, 2))), integer) = true then `assign`(a, `/`(`*`(d), `*`(`^`(i, 2)))) end if end do end if; if `<`(d, 0) then...
proc (d) local h, x, a, i, m; if `<`(0, d) then for i to d do if type(`/`(`*`(d), `*`(`^`(i, 2))), integer) = true then `assign`(a, `/`(`*`(d), `*`(`^`(i, 2)))) end if end do end if; if `<`(d, 0) then...
proc (d) local h, x, a, i, m; if `<`(0, d) then for i to d do if type(`/`(`*`(d), `*`(`^`(i, 2))), integer) = true then `assign`(a, `/`(`*`(d), `*`(`^`(i, 2)))) end if end do end if; if `<`(d, 0) then...
proc (d) local h, x, a, i, m; if `<`(0, d) then for i to d do if type(`/`(`*`(d), `*`(`^`(i, 2))), integer) = true then `assign`(a, `/`(`*`(d), `*`(`^`(i, 2)))) end if end do end if; if `<`(d, 0) then...
proc (d) local h, x, a, i, m; if `<`(0, d) then for i to d do if type(`/`(`*`(d), `*`(`^`(i, 2))), integer) = true then `assign`(a, `/`(`*`(d), `*`(`^`(i, 2)))) end if end do end if; if `<`(d, 0) then...
proc (d) local h, x, a, i, m; if `<`(0, d) then for i to d do if type(`/`(`*`(d), `*`(`^`(i, 2))), integer) = true then `assign`(a, `/`(`*`(d), `*`(`^`(i, 2)))) end if end do end if; if `<`(d, 0) then...
proc (d) local h, x, a, i, m; if `<`(0, d) then for i to d do if type(`/`(`*`(d), `*`(`^`(i, 2))), integer) = true then `assign`(a, `/`(`*`(d), `*`(`^`(i, 2)))) end if end do end if; if `<`(d, 0) then...
proc (d) local h, x, a, i, m; if `<`(0, d) then for i to d do if type(`/`(`*`(d), `*`(`^`(i, 2))), integer) = true then `assign`(a, `/`(`*`(d), `*`(`^`(i, 2)))) end if end do end if; if `<`(d, 0) then...
proc (d) local h, x, a, i, m; if `<`(0, d) then for i to d do if type(`/`(`*`(d), `*`(`^`(i, 2))), integer) = true then `assign`(a, `/`(`*`(d), `*`(`^`(i, 2)))) end if end do end if; if `<`(d, 0) then...
proc (d) local h, x, a, i, m; if `<`(0, d) then for i to d do if type(`/`(`*`(d), `*`(`^`(i, 2))), integer) = true then `assign`(a, `/`(`*`(d), `*`(`^`(i, 2)))) end if end do end if; if `<`(d, 0) then...
proc (d) local h, x, a, i, m; if `<`(0, d) then for i to d do if type(`/`(`*`(d), `*`(`^`(i, 2))), integer) = true then `assign`(a, `/`(`*`(d), `*`(`^`(i, 2)))) end if end do end if; if `<`(d, 0) then...
proc (d) local h, x, a, i, m; if `<`(0, d) then for i to d do if type(`/`(`*`(d), `*`(`^`(i, 2))), integer) = true then `assign`(a, `/`(`*`(d), `*`(`^`(i, 2)))) end if end do end if; if `<`(d, 0) then...
proc (d) local h, x, a, i, m; if `<`(0, d) then for i to d do if type(`/`(`*`(d), `*`(`^`(i, 2))), integer) = true then `assign`(a, `/`(`*`(d), `*`(`^`(i, 2)))) end if end do end if; if `<`(d, 0) then...
(9.1.1)
 

 

 

Examples 

 

1 (9.2.1)
 

 

2 (9.2.2)
 

 

`+`(`-`(`/`(`*`(`+`(ln(sin(`+`(`*`(`/`(1, 33), `*`(Pi))))), ln(sin(`+`(`*`(`/`(2, 33), `*`(Pi))))), ln(sin(`+`(`*`(`/`(4, 33), `*`(Pi))))), `-`(ln(sin(`+`(`*`(`/`(5, 33), `*`(Pi)))))), `-`(ln(sin(`+`(...
`+`(`-`(`/`(`*`(`+`(ln(sin(`+`(`*`(`/`(1, 33), `*`(Pi))))), ln(sin(`+`(`*`(`/`(2, 33), `*`(Pi))))), ln(sin(`+`(`*`(`/`(4, 33), `*`(Pi))))), `-`(ln(sin(`+`(`*`(`/`(5, 33), `*`(Pi)))))), `-`(ln(sin(`+`(...
`+`(`-`(`/`(`*`(`+`(ln(sin(`+`(`*`(`/`(1, 33), `*`(Pi))))), ln(sin(`+`(`*`(`/`(2, 33), `*`(Pi))))), ln(sin(`+`(`*`(`/`(4, 33), `*`(Pi))))), `-`(ln(sin(`+`(`*`(`/`(5, 33), `*`(Pi)))))), `-`(ln(sin(`+`(...
(9.2.3)
 

 

1.0000 (9.2.4)
 

 

 

 

References 

[1] Z.I.Borevich and I.R.Shafarevich, Number Theory, Academic Press, Inc., 1966  

[2] P.Samuel, Th?orie Alg?brique des Nombres, Hermann, Editeurs des Sciences et des Arts, 1971.