获得基本判别式
Get fundamental discriminant
Sage 中是否有函数 returns 与给定判别式关联的基本判别式?
见https://en.wikipedia.org/wiki/Fundamental_discriminant
这是我写的函数,找不到现成的:
def getFund(D):
if D % 4 == 2 or D % 4 == 3:
raise ValueError("Not a discriminant.")
if D == 0:
raise ValueError("There is no fundamental associated to 0.")
P = sign(D)
for p in factor(D):
if p[1] % 2 == 1:
P *= p[0]
if P % 4 == 2 or P % 4 == 3:
P *= 4
return P
不知道SageMath有没有实现这个功能
但是如果我理解正确的话,你可以这样定义函数:
def fundamental_discriminant(d):
if d % 4 == 1:
return d.squarefree_part()
if d % 4 == 0:
k = d.valuation(4)
dd = d // 4^k
if dd % 4 == 1:
return dd.squarefree_part()
if dd % 4 == 2:
return 4 * dd.squarefree_part()
if dd % 4 == 3:
return 4 * dd.squarefree_part()
raise ValueError("Not a discriminant.")
fundamental_discriminant有什么问题?
sage: fundamental_discriminant(1)
1
sage: fundamental_discriminant(3)
12
sage: fundamental_discriminant?
Signature: fundamental_discriminant(D)
Docstring:
Return the discriminant of the quadratic extension K=Q(sqrt{D}),
i.e. an integer d congruent to either 0 or 1, mod 4, and such that,
at most, the only square dividing it is 4.
INPUT:
* "D" - an integer
OUTPUT:
* an integer, the fundamental discriminant
Sage 中是否有函数 returns 与给定判别式关联的基本判别式?
见https://en.wikipedia.org/wiki/Fundamental_discriminant
这是我写的函数,找不到现成的:
def getFund(D):
if D % 4 == 2 or D % 4 == 3:
raise ValueError("Not a discriminant.")
if D == 0:
raise ValueError("There is no fundamental associated to 0.")
P = sign(D)
for p in factor(D):
if p[1] % 2 == 1:
P *= p[0]
if P % 4 == 2 or P % 4 == 3:
P *= 4
return P
不知道SageMath有没有实现这个功能
但是如果我理解正确的话,你可以这样定义函数:
def fundamental_discriminant(d):
if d % 4 == 1:
return d.squarefree_part()
if d % 4 == 0:
k = d.valuation(4)
dd = d // 4^k
if dd % 4 == 1:
return dd.squarefree_part()
if dd % 4 == 2:
return 4 * dd.squarefree_part()
if dd % 4 == 3:
return 4 * dd.squarefree_part()
raise ValueError("Not a discriminant.")
fundamental_discriminant有什么问题?
sage: fundamental_discriminant(1)
1
sage: fundamental_discriminant(3)
12
sage: fundamental_discriminant?
Signature: fundamental_discriminant(D)
Docstring:
Return the discriminant of the quadratic extension K=Q(sqrt{D}),
i.e. an integer d congruent to either 0 or 1, mod 4, and such that,
at most, the only square dividing it is 4.
INPUT:
* "D" - an integer
OUTPUT:
* an integer, the fundamental discriminant