可计算代数数论(2012-12-09 20:56、2013-03-23 21:39、2013-06-23 20:27、2013-06-23 20:32、2014-05-16 17:49)
整數有很多性質,其中這整數的帶余除法大家都知道:
兩個整數a和b,如果b不為零,一定有一個整數q和一個非負整數r使得 a=qb+r, 其中0≤r<|b|。
gap> a:=8;;b:=3;;q:=EuclideanQuotient(a,b);r:=EuclideanRemainder(a,b);qr:=QuotientRemainder(Integers,a,b);
2
2
[ 2, 2 ]
gap> a:=8;;b:=3;;q:=EuclideanQuotient(GaussianIntegers,a,b);r:=EuclideanRemainder(GaussianIntegers,a,b);qr:=QuotientRemainder(GaussianIntegers,a,b);
3
-1
[ 3, -1 ]
gap> for n in [1..10] do Print(Norm(1+E(n)),",");od;
2,0,1,2,1,3,1,2,1,5,
gap> Norm(1+E(3));
1
gap> Norm(1+E(4));
2
gap> Factors(GaussianIntegers,2);
[ 1-E(4), 1+E(4) ]
gap> for i? in [5,13,17,29] do L:=Factors(GaussianIntegers,i);Print(i,",",L,"\n");od;
5,[ 2-E(4), 2+E(4) ]
13,[ 3-2*E(4), 3+2*E(4) ]
17,[ 4-E(4), 4+E(4) ]
29,[ 5-2*E(4), 5+2*E(4) ]
//5 = (2 + i) × (2 ? i),
//13 = (2 + 3i) × (2 ? 3i),
//17 = (4 + i) × (4 ? i),
//29 = (2 + 5i) × (2 ? 5i), ...
gap> for n in [2..10] do R:=DefaultRingByGenerators([ 2, E(n) ]);Print(R,",");od;
Integers,CF(3),GaussianIntegers,CF(5),CF(3),CF(7),CF(8),CF(9),CF(5),
gap> Gcd(10,15);
5
gap> Gcd(200,300,50,35);
5
gap> Gcd(18-E(4),-29+3*E(4));
3+4*E(4)
gap> Gcd(GaussianIntegers,[18-E(4),-29+3*E(4)]);
3+4*E(4)
gap> Gcd(GaussianIntegers,[10,15]);
5
>> maple('with(GaussInt);') ans = [GIbasis, GIchrem, GIdivisor, GIfacpoly, GIfacset, GIfactor, GIfactors, GIgcd, GIgcdex, GIhermite, GIissqr, GIlcm, GImcmbine, GInearest, GInodiv, GInorm, GInormal, GIorder, GIphi, GIprime, GIquadres, GIquo, GIrem, GIroots, GIsieve, GIsmith, GIsqrfree, GIsqrt, GIunitnormal] >> maple('GaussInt[GIfactor](2);') ans = ``(-i)*``(1+i)^2 >> maple('GaussInt[GIfactors](2);') ans = [-i, [[1+i, 2]]] >> maple('GaussInt[GIfactor](5+7*i);') ans = ``(i)*``(1+i)*``(1-6*i)
>> maple('GaussInt[GIfactors](5+7*i);') ans = [i, [[1+i, 1], [1-6*i, 1]]]
totient(1)=1
totient(2)=1
totient(3)=2
totient(4)=2
totient(5)=4
totient(6)=2
totient(7)=6
totient(8)=4
totient(9)=6
totient(10)=4
totient(11)=10
totient(12)=4
totient(13)=12
totient(14)=6
totient(15)=8
totient(16)=8
totient(17)=16
totient(18)=6
totient(19)=18
totient(20)=8
totient(21)=12
totient(22)=10
totient(23)=22
totient(24)=8
totient(25)=20
totient(26)=12
totient(27)=18
totient(28)=12
totient(29)=28
totient(30)=8
totient(31)=30
totient(32)=16
totient(33)=20
totient(34)=16
totient(35)=24
totient(36)=12
totient(37)=36
totient(38)=18
totient(39)=24
totient(40)=16
totient(41)=40
totient(42)=12
totient(43)=42
totient(44)=20
totient(45)=24
totient(46)=22
totient(47)=46
totient(48)=16
totient(49)=42
totient(50)=20
totient(51)=32
totient(52)=24
totient(53)=52
totient(54)=18
totient(55)=40
totient(56)=24
totient(57)=36
totient(58)=28
totient(59)=58
totient(60)=16
totient(61)=60
totient(62)=30
totient(63)=36
totient(64)=32
totient(65)=48
totient(66)=20
totient(67)=66
totient(68)=32
totient(69)=44
totient(70)=24
totient(71)=70
totient(72)=24
totient(73)=72
totient(74)=36
totient(75)=40
totient(76)=36
totient(77)=60
totient(78)=24
totient(79)=78
totient(80)=32
totient(81)=54
totient(82)=40
totient(83)=82
totient(84)=24
totient(85)=64
totient(86)=42
totient(87)=56
totient(88)=40
totient(89)=88
totient(90)=24
totient(91)=72
totient(92)=44
totient(93)=60
totient(94)=46
totient(95)=72
totient(96)=32
totient(97)=96
totient(98)=42
totient(99)=60
totient(100)=40
#include "stdafx.h"
#include<math.h>
extern "C" _declspec(dllexport)int __stdcall factorial(int value);//階乘(小整數版)
extern "C" _declspec(dllexport)int __stdcall nlcb(int *a, int n);//求n個數的最大公約數,有問題
int __stdcall factorial(int value)
{
?if(value == 0||value == 1)
??return (1);
?else
??return (value * factorial(value-1));
}
int __stdcall nlcb(int *a, int n)
{
?int product=1;
?for(int i=0;i<n;i++)
?{
??product*=a[i];
??a[i]=abs(a[i]);
?}
?if(product<0)
??return -nlcb(a,n);
?
?int min=a[1];
?int i,flag;
?for(i=2;i<n;i++)
??if(a[i]<min)
???min=a[i];
?for(;;min--)
?{
??flag=1;
??for(i=1;i<=n;i++)
???if(a[i]%min)
???{
????flag=0;
????break;
???}
???if(flag)
????return min;
?}
}
//求2個數的最大公約數
int __stdcall GCD(int a, int b)
{
?//int Arr3[3]={12,32,16};
?//int ret3=nlcb(&Arr3[0],3);
#if 0
?int Arr[2]={0};
?Arr[0]=a;
?Arr[1]=b;
?int ret=nlcb(Arr,2);//有問題
?return ret;
#else
?if(a*b<0)
??return -GCD(abs(a),abs(b));
?int temp=0;
?if(a<b)
?{
??temp=a;
??a=b;
??b=temp;
?}
?if(a%b==0)
??return b;
?else
??return GCD(a%b,b);
?return 0;
#endif
}
int __stdcall Iscoprime(int a, int b)
{
?int ret=0;
?if(GCD(a,b)==1)
??ret=1;
?return ret;
}
int __stdcall totient(int num)
{
?int count=0;
#if 1
?if(num==1)
??return 1;
?for(int i=1;i<=num-1;i++)
#else
?for(int i=1;i<num;i++)
#endif
?{
??? count+=Iscoprime(num,i);
?}
?return count;
}
int main(int argc, char* argv[])
{?
?int ret=GCD(12,32);
?int ret1=GCD(-12,32);
?int ret2=GCD(12,-32);
?for(int i=1;i<=100;i++)
??printf("totient(%d)=%d\n",i,totient(i));
?getchar();
?return 0;
}
用公式φ(n)=n∏[k=1->r](1-1/p_k)
φ(42)=φ(2·3·7)=42(1/2)(2/3)(6/7)=12
φ(360)=φ(2^3·3^2·5)=360(1/2)(2/3)(4/5)=96,即在1到359這359和自然數當中,與360互素的有96個。
事實上,φ(m_1m_2)=φ(m_1)φ(m_2),其中m_1與m_2互素。
摘錄自維基百科:
單位的n次根以乘法構成n階循環群。它的生成元是n次本原單位根。n次本原單位根是e^(2piki/n),其中k和n互質。n次本原單位根數目為歐拉函數φ(n)。
規定:φ(1)=1----1次單位根有1個:1
1是1次本原單位根,是2,3,4……次非本原單位根
φ(2)=1----2次單位根有2個:+1和-1,只有-1是本原根
-1是2次本原單位根,是4,6,8,……次非本原單位根
φ(3)=2----3次單位根有3個:1,cos(2pi/3)+isin(2pi/3),cos(-2pi/3)+isin(-2pi/3),除1外都是本原根
φ(4)=2----4次單位根有4個:+1,i,-1,-i,其中+i和-i是本原根。
5次本原單位根有4個:((usqrt(5)-1)/4)+uisqrt((5+usqrt(5))/8),u,v∈{-1,1}
6次本原單位根有2個:cos(pii/3)+isin(pii/3),cos(-pii/3)+isin(-pii/3)
--注意觀察2,3,6次本原根的關系
7次本原單位根有6個:
8次本原單位根有4個:cos(pii/4)+isin(pii/4),cos(5pii/4)+isin(5pii/4),cos(-pii/4)+isin(-pii/4),cos(3pii/4)+isin(3pii/4)
--注意觀察2,4,8次本原根的關系
高斯注意到,如果n次本原單位根能僅用平方根表示出來,那么正n邊形就能用尺規作圖構造出來。如果單位根需要3次,4次,或更高次根式,那么正n邊形就不能用尺規作圖構造出來。
以下問題的一般化為:求一個高斯整數的高斯素因子(高斯整數環的算術基本定理)
/*
問題描述:
求一個整數的高斯素因子。
解題思路:
高斯整數a+bi是素數當且僅當:
1)a、b中有一個是零,另一個數的絕對值是形如4n+3的素數;
2)a、b均不為零,而a^2+b^2為素數;
于是只要將每個分解素因子,對于每個素因子P,如果該素因子形如4n+3,則必定能分解成(a+bj)(a-bj)=a^2+b^2,枚舉解決。
*/
#include <iostream>
#include <cmath>
using namespace std;
int f[65537], p[65537], size;
int pri[1000], top;
int n;
struct point
{
??? int a;
??? int b;
??? char oper;
}s[10000];
int num;
//篩選素數
void init()
{
??? f[1] = 1;
??? int i, j;
??? for(i = 2; i <= 65536; i++)
??? {
??????? if(!f[i])
??????? {
??????????? p[ size++ ] = i;
??????????? for(j = i+i; j <= 65536; j += i)
??????????????? f[j] = 1;
??????? }
??? }
}
//素因子分解
void Flip(int key)
{
??? int i;
??? top = 0;
??? for(i = 0; i < size; i++)
??? {
??????? if(key % p[i] == 0)
??????? {
??????????? pri[ top++ ] = p[i];
??????????? key /= p[i];
??????????? while(key % p[i] == 0){
??????????????? pri[ top++ ] = p[i];
??????????????? key /= p[i];
??????????? }
??????? }
??? }
??? if(key - 1)
??????? pri[ top++ ] = key;
}
//高斯素數分解
void Part(int prime)
{
??? int i;
??? if(prime == 2)
??? {
??????? s[ num ].a = 1; s[ num ].b = 1; s[ num++ ].oper = '+';
??????? s[ num ].a = 1; s[ num ].b = 1; s[ num++ ].oper = '-';
??? }else if( (prime - 1) % 4 == 0)
??? {
??????? for(i = 1; ;i++)
??????? {
??????????? int u = int(sqrt(prime - i*i*1.0) + 1e-5);
??????????? if(u*u + i*i == prime)
??????????? {
??????????????? s[ num ].a = i; s[ num ].b = u; s[ num++ ].oper = '+';
??????????????? s[ num ].a = i; s[ num ].b = u; s[ num++ ].oper = '-';
??????????????? break;
??????????? }
??????? }
??? }else
??? {
??????? s[ num ].a = prime; s[ num++ ].b = 0;
??? }
}
int cmp(const void *a, const void *b)
{
??? point *c = (point *)a;
??? point *d = (point *)b;
??? if(c->a != d->a)
??????? return c->a - d->a;
??? if(c->b != d->b)
??????? return c->b - d->b;
??? return c->oper == '-' ? 1 : -1;
}
void Print(int key)
{
??? printf("%d", s[key].a );
???
??? if(s[key].b == 0)
??????? return;
??? if(s[key].b == 1)
??? {
??????? printf("%cj", s[key].oper);
??? }else
??? {
??????? printf("%c%dj", s[key].oper, s[key].b);
??? }
}
int main()
{
??? init();
??? int i, cas = 1;
??? while(scanf("%d", &n) != EOF)
??? {
??????? num = 0;
??????? Flip(n);
??????? for(i = 0; i < top; i++)
??????? {
??????????? Part(pri[i]);
??????? }
??????? qsort(s, num, sizeof(point), cmp);
??????? printf("Case #%d: ", cas++);
??????? Print(0);
??????? for(i = 1; i < num; i++)
??????? {
??????????? if(s[i].a == s[i-1].a
??????????????? && s[i].b == s[i-1].b
??????????????? && s[i].oper == s[i-1].oper)
??????????????? continue;
??????????? if(i)
??????????????? printf(", ");
??????????? Print(i);
??????? }
??????? puts("");
??? }
}
#include<iostream>
#include<complex>
#include<cstdlib>
using namespace std;
bool is_prime(long p)
{
?if( p<2 ) return false;
?for(int i=2; i*i<=p; i++)
? if ( p%i==0 )
?? return false;
?return true;
}
bool is_4n_plus_3( long a ) { return a%4 == 3 ; }
bool is_gausian_prime( std::complex<long> z ) // a + bi
{
?const long a = std::abs( z.real() ) ;
?const long b = std::abs( z.imag() ) ;
?if( a == 0 ) return is_prime(b) && is_4n_plus_3(b) ;
?else if( b == 0 ) return is_prime(a) && is_4n_plus_3(a) ;
?else return is_prime( a*a + b*b ) ;
}
/*
?自然數集與整數集一一對應:當n為偶數時,對應到n/2; n為奇數時對應到1-(n+1)/2
?0,1,-1,……
?有限多個可數集的笛卡爾積是可數的。
?Z[i]可數:按范數升序和幅角主值升序排列
?0,1,i,-1,-i,1+i,-1+i,-1-i,1-i,……
高斯整數和普通整數相像,也是惟一分解 (Unique Factorization) 的。除去因子的次序、單位 + 1、 - 1 、 + i 、 - i 及相伴元以外的分解是惟一的。在高斯整數的世界中,型如 4k-1 的素數 (如 3、7、11、19、23、......) 仍為素數,但其他的則可進一步分解成其他高斯素數:
2 = (1+i) (1-i) 5 = (2+i) (2-i) 13 = (2+3i) (2-3i)
17 = (4+i) (4-i) 29 = (5+2i) (5-2i) 37 = (6+i) (6-i)
現在我們知道在實軸 (Real Axis) 及虛軸 (Imaginary Axis) 上存在無限多個高斯素數,因為虛軸上的高斯素數不過是實軸的高斯素數的相伴元。但在複平面 (Complex Plane) 上別的直線又如何呢?例如所有型如 (1 + ki) 的高斯素數是否均存有無限多個呢?仍是存疑。
某些素數并非高斯素數,如2=(1+i)(1-i)及5=(2+i)(2-i)。
4除余3的素數都是高斯素數,4除余1者則否,因為后者能表示成兩個平方數之和:
p=a^2+b^2=(a+bi)(a-bi)
若某個高斯整數的范數是素數,該高斯整數是高斯素數。
A complex number a + bj where a and b are integers is a Gaussian prime if the factors are 1, -1, -a - bj and a + bj only.
The following are Gaussian primes: 1 + j, 1 - j, 1 + 2j, 1 - 2j, 3 and 7.
The Gaussian prime factors of 5 are:
??? 1 + 2j and 1 - 2j, or
??? 2 + j and 2 - j, or
??? -1 - 2j and -1 + 2j, or
??? -2 - j and -2 + j.
求證范數小于100,1/4正平面(0<=θ<π/2)上所有“高斯素數”
1+1I?? 1+2I?? 2+1I?? 3?? 2+3I?? 3+2I?? 1+4I?? 4+1I?? 2+5I?? 5+2I?? 1+6I?? 6+1I?
4+5I?? 5+4I?? 7?? 2+7I?? 7+2I?? 5+6I?? 6+5I?? 3+8I?? 8+3I?? 5+8I?? 8+5I?? 4+9I?? 9+4I
高斯素數是指除了單位{1,-1,i,-i}及其自身與單位的乘積,不能被其他高斯整數除盡。
找高斯素數我覺得也不很難,只要得出正平面(0<=θ<π/2)上的高斯素數,然后乘上單位
{-1,i,-i}就能得出其他三個平面上的高斯素數。可以看出高斯素數是關于原點對稱的。
*/
class gint
{
public:
?gint(long a,long b)
?{
? m_a=a;
? m_b=b;
?}
?static bool IsPrime(gint N)
?{
? return is_gausian_prime(complex<long>(N.m_a,N.m_b));
?}
?friend ostream& operator<< (ostream& os,gint& N);
public:
?long m_a;
?long m_b;
};
ostream& operator<< (ostream& os,gint& N)
{
?string strDes=(gint::IsPrime(N)?"是高斯素數":"不是高斯素數");
?if(N.m_a!=0 && N.m_b>0)
? cout<<N.m_a<<"+"<<N.m_b<<"i"<<strDes;
?if(N.m_a!=0 && N.m_b<0)
? cout<<N.m_a<<N.m_b<<"i"<<strDes;
?if(/*N.m_a!=0 && */N.m_b==0)
? cout<<N.m_a<<strDes;
?if(N.m_a==0 && N.m_b!=0)
? cout<<N.m_b<<"i"<<strDes;
?return os;
}
unsigned int Primes[]={2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,
107,109,113,127,131,137,139,149,151,157,163,167,173,179,181,191,193,197,199,211,223,227,229,233,239,241,251,257,263,269,271,277,281,283,293,307,311,313,317,331,
337,347,349,353,359,367,373,379,383,389,397,401,409,419,421,431,433,439,443,449,457,461,463,467,479,487,491,499,503,509,521,523,541,547,557,563,569,571,577,587,
593,599,601,607,613,617,619,631,641,643,647,653,659,661,673,677,683,691,701,709,719,727,733,739,743,751,757,761,769,773,787,797,809,811,821,823,827,829,839,853,
857,859,863,877,881,883,887,907,911,919,929,937,941,947,953,967,971,977,983,991,997};
int main(void)
{
?for(int i=0;i<sizeof(Primes)/sizeof(unsigned int);i++)
? cout<<gint(Primes[i],0)<<endl;
?cout<<gint(1,0)<<endl;
?cout<<gint(-1,0)<<endl;
?cout<<gint(0,1)<<endl;
?cout<<gint(0,-1)<<endl;
?cout<<gint(1,1)<<endl;
?cout<<gint(1,-1)<<endl;
?cout<<gint(4,3)<<endl;
?cout<<gint(5,4)<<endl;
?//cout<<int_max()(3,4)<<endl;
??? cin.get();
??? return 0;
}
/*
前20以內+8
20~60 +9
60~100 +8
100~140 +9
140~180 +8
180~220 +9
=>第100個質數為449【實際上Primes[99]=541】
1000以內有質數216個【實際上有168個】
質概率P(n)=1.0625/5(n->∞)
*/
#include "stdafx.h"
#include<vector>
#include<iostream>
#include<cmath>
#include<algorithm>
using namespace std;
unsigned int Primes[]={2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,
107,109,113,127,131,137,139,149,151,157,163,167,173,179,181,191,193,197,199,211,223,227,229,233,239,241,251,257,263,269,271,277,281,283,293,307,311,313,317,331,
337,347,349,353,359,367,373,379,383,389,397,401,409,419,421,431,433,439,443,449,457,461,463,467,479,487,491,499,503,509,521,523,541,547,557,563,569,571,577,587,
593,599,601,607,613,617,619,631,641,643,647,653,659,661,673,677,683,691,701,709,719,727,733,739,743,751,757,761,769,773,787,797,809,811,821,823,827,829,839,853,
857,859,863,877,881,883,887,907,911,919,929,937,941,947,953,967,971,977,983,991,997};
//unsigned int Primes[]={2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107
//,109,113,127,131,137,139,149,151,157,163,167,173,179,181,191,193,197,199,211,223
//,227,229,233,239,241,251,257,263,269,271,277,281,283,293,307,311,313,317,331,337
//,347,349,353,359,367,373,379,383,389,397,401,409,419,421,431,433,439,443,449,457
//,461,463,467,479,487,491,499,503,509,521,523,541,547,557,563,569,571,577,587,593
//,599,601,607,613,617,619,631,641,643,647,653,659,661,673,677,683,691,701,709,719
//,727,733,739,743,751,757,761,769,773,787,797,809,811,821,823,827,829,839,853,857
//,859,863,877,881,883,887,907,911,919,929,937,941,947,953,967,971,977,983,991,997};
namespace math
{
?typedef unsigned long DWORD;?
?//函數decomp_integer對n分解素因數,分解后的素數存入facArr數組,并返回因子的個數??
?int decomp_integer( DWORD n, DWORD facArr[])?
?{?
? DWORD fac;????? //n的可能的一個因子??
? int count;?
? if (n<4)??????? //4以內的數,不需要分解??
? {????
?? facArr[0]=n; return 1;???
? }?
? count=0;?
? //下面的while循環為2試出n,直到2不是n的因子為止??
? while ( (n & 1)==0) // 這里判斷偶數用 (n &1)==0,這比(n % 2)==0更快??
? {?
?? facArr[count++]=2;? n/=2;?
? }?
? fac=3;? //用3到sqrt(n)之間的奇數試除??
? while (fac*fac<=n) // fac*fac <= n??
? {?
?? while (n % fac==0)?
?? {?
??? facArr[count++]=fac;?
??? n /= fac;?
?? }?
?? fac+=2;?
? }?
? if (n==1)?
?? return count;?
? facArr[count++]=n;?
? return count;?
?}
?void UFD(unsigned int N,vector<unsigned int> &vecMP,vector<unsigned int> &vecP,vector<unsigned int> &vecA)
?{
? DWORD facArray[32];?
? int count=decomp_integer(N,facArray);
? for(int i=0;i<count;i++)?
?? vecMP.push_back(facArray[i]);
? vecP.insert(vecP.end(),vecMP.begin(), vecMP.end());
? vecP.erase(unique(vecP.begin(),vecP.end()),vecP.end());
? vecA.resize(vecP.size());
? for(int i=0;i<vecP.size();i++)
? {
?? vecA[i]=std::count(vecMP.begin(), vecMP.end(),vecP[i]);
? }
?}
/*
EulerPhi(1)=1
EulerPhi(2)=1
EulerPhi(3)=2
EulerPhi(4)=2
EulerPhi(5)=4
EulerPhi(6)=2
EulerPhi(7)=6
EulerPhi(8)=4
EulerPhi(9)=6
EulerPhi(10)=4
EulerPhi(11)=10
EulerPhi(12)=4
*/
/*
定義:給定正整數M,不大于M并與M互素的正整數的個數記作φ(M),稱φ(M)為歐拉函數。
φ(1)=1,φ(2)=1,φ(3)=2,φ(p)=p-1(p設為素數)
M=12=2^2?3,則φ(M)=12(1-1/2)(1-1/3)=4。
若a和b是任意兩個互素的正整數,則φ(ab)=φ(a)?φ(b)。
*/
?unsigned int EulerPhi(unsigned int N)
?{
? if(N==1)
?? return 1;
? vector<unsigned int> vecMP,vecP,vecA;
? math::UFD(N,vecMP,vecP,vecA);
? unsigned int ret=N;
? for(int i=0;i<vecP.size();i++)
? {
???? ret=ret*(vecP[i]-1)/vecP[i];
? }
? return ret;
?}
}
bool IsPrime(unsigned int N)
{
?for(int i=2;i<=sqrt((float)N);i++)
? if(N%i==0)
?? return false;
?//else
?// continue;
?return true;
}
int main(void)
{
?//for(int i=2;i<50000;i++)
?// if(IsPrime(i))
?//? printf("%d,",i);
?//printf("%d\n",sizeof(Primes)/sizeof(unsigned int));
?//printf("Primes[99]=%d\n",Primes[99]);
?unsigned int N=300;//72;
?vector<unsigned int> vecMP,vecP,vecA;
?math::UFD(N,vecMP,vecP,vecA);
?system("pause");
?return 0;
}
按定義計算N次剩余符號(N=2,3,4)
問題1:對于有理整數、高斯整數、愛森斯坦整數,N(p)=?
問題2:jacobi4(3,7)=-1<=>x^4=3(mod7)在Z上無解時,J4(3,7)是-1,i,-i中哪一個?
對任意的(α,π)=1,有α^(φ(π))≡1(mod π), 當π是奇素數時4|φ(π),
所以,(α^(φ(π)/4-1)-1)(α^(φ(π)/4-1)-i)(α^(φ(π)/4-1)+1)(α^(φ(π)/4-1)+i)≡0(mod π)。
進而推出 (α,π)_4≡α^(φ(π)/4)≡1,i,-1,-i(mod π)有且僅有一種情形成立。 由于0,1,i,-1,-i本身對乘法是封閉的,所以Z[i]中的四次剩余特征可直接定義為 (α,π)_4=1,α是模π的四次剩余,即(α,π)_4≡α^(φ(π)/4)≡1(mod π),
(α,π)_4=i,α是模π的四次非剩余,且(α,π)_4≡α^(φ(π)/4)≡i(mod π),
(α,π)_4=-1,α是模π的四次非剩余,且(α,π)_4≡α^(φ(π)/4)≡-1(mod π), (α,π)_4=-i,α是模π的四次非剩余,且(α,π)_4≡α^(φ(π)/4)≡-i(mod π), (α,π)_4=0,π|α。
三次、四次互反律
Reciprocity Laws - From Euler to Eisenstein - F. Lemmermeyer (Springer, 2000)
http://www.docin.com/p-102193376.html#documentinfo
10.1.1.192.1338 Reciprocity laws, from Euler to Eisenstein (2007)(數論圖書評論)http://www.docin.com/p-478399430.html
互反律:從歐拉到愛森斯坦
三次互反律
對Z中三次剩余的討論,導致對O_Q(sqrt(-3))=Z[e^(2pii/3)]=Z[-1/2+sqrt(-3)/2]中三次剩余特征的研究。
設p是正有理素數,a∈Z,(a,p)=1,我們考慮Z中的三次同余方程x^3≡a(mod p),x∈Z。----(1)
當p=3或p≡2(mod 3)時,Z中模p的三次剩余特征
(a|p)_(3,Z)≡a^(p-1)/(3,p-1)≡a^(p-1) ≡1(mod p),----(2)
所以,這時方程(1)總有唯一解。
例如:
jacobi3(13,17)=1
jacobi3(5,17)=1
jacobi3(1,5)=1
jacobi3(2,5)=1
jacobi3(3,5)=1
jacobi3(4,5)=1
jacobi3(7,5)=1
jacobi3(8,5)=1
jacobi3(-3,2)=1
jacobi3(-3,5)=1
jacobi3(5,2)=1
jacobi3(5,3)=1
jacobi3(5,11)=1
jacobi3(5,17)=1
jacobi3(-7,2)=1
jacobi3(-7,3)=1
jacobi3(-7,5)=1
jacobi3(-7,11)=1
jacobi3(-7,17)=1
jacobi3(-11,2)=1
jacobi3(-11,3)=1
jacobi3(-11,5)=1
jacobi3(13,2)=1
jacobi3(13,3)=1
jacobi3(13,5)=1
jacobi3(13,11)=1
jacobi3(13,17)=1
jacobi3(17,2)=1
jacobi3(17,3)=1
jacobi3(17,5)=1
jacobi3(17,11)=1
當p≡1(mod 3)時,同余方程(1)有解的充要條件是
(a|p)_(3,Z)≡a^((p-1)/3)≡1(mod p),----(3)
另一方面,p≡1(mod 3)在Z[-1/2+sqrt(-3)/2]中是分裂的。
同余方程(1)和Z[-1/2+sqrt(-3)/2]中的同余方程χ^3≡a(mod π_0),x∈Z[-1/2+sqrt(-3)/2],同時有解或無解。這樣,當p≡1(mod 3)時,Z中模p的三次剩余特征就歸結為討論Z[-1/2+sqrt(-3)/2]中的三次剩余特征。
例如:
jacobi3(-3,7)=-1
jacobi3(-3,11)=1
jacobi3(-3,13)=-1
jacobi3(-3,17)=1
jacobi3(5,7)=-1
jacobi3(5,13)=1
jacobi3(-7,13)=-1
jacobi3(-11,7)=-1
jacobi3(-11,13)=-1
jacobi3(-11,17)=1
jacobi3(13,7)=1
jacobi3(17,7)=-1
jacobi3(17,13)=-1 四次互反律
1825年,高斯研究了有理整數Z中的四次剩余問題。設p∈N是有理素數,a∈Z,p!|a。如果同余方程x^4≡a(mod p),x∈Z,----(1)有解,就稱a是模p的四次剩余;如果無解,就稱a是模p的四次非剩余。p=2的情形是顯然的,所以下面假定p>=3。
a是模p的四次剩余的充要條件是四次剩余特征
(a|p)_(4,Z)≡a^((p-1)/(4,p-1))≡1(mod p)。----(2) 當p≡3(mod 4)時顯有(a|p)_(4,Z)≡(a|p)(mod p)。----(3)
----四次剩余特征和二次剩余特征的聯系(20140429舉例)
所以,a是模p的四次剩余的充要條件是它是模p的二次剩余。
例如:
jacobi4(-3,7)=1=jacobi(-3,7)=1
jacobi4(-3,11)=-1=jacobi(-3,11)=-1
jacobi4(5,11)=1=jacobi(5,11)=1
jacobi(5,3)=-1=jacobi4(5,3)=-1
jacobi(5,7)=-1=jacobi4(5,7)=-1
當p≡1(mod 4)時, (a|p)_(4,Z)≡a^((p-1)/4)(mod p)。----(4)
所以有,
[(a|p)_(4,Z)]^2≡(a|p) ≡±1(mod p)。----(5)
當a是模p的四次剩余時一定也是二次剩余,當a是模p的二次非剩余時,一定也是四次非剩余。但當a是模p的二次剩余時,即a^((p-1)/2)≡1(mod p)----(6)時,a不一定是四次剩余。
例如:
jacobi4(1,5)=1=>jacobi(1,5)=1
jacobi4(13,17)=1=>jacobi(13,17)=1
jacobi(5,17)=-1=>jacobi4(5,17)=-1
jacobi(-3,5)=-1=>jacobi4(-3,5)=-1
jacobi(-3,17)=-1=>jacobi4(-3,17)=-1
jacobi(5,17)=-1=>jacobi4(5,17)=-1
jacobi(-3,13)=1時,jacobi4(-3,13)=-1
jacobi(-11,5)=1時,jacobi4(-11,5)=-1
jacobi(4,5)=1時,jacobi4(4,5)=-1
jacobi(1,5)=1時,jacobi4(1,5)=1
jacobi(13,17)=1時,jacobi4(13,17)=1
雙二次互反律的特殊情形——
1.高斯素數π,σ都是4n+3型的有理素數p,q∈{3,7,11,……}
N(π)=p^2
N(σ)=q^2
[(p^2-1)/4][(q^2-1)/4]=[(4n+4)(4n+2)/4][(4m+4)(4m+2)/4]=(n+1)(m+1)(4n+2)(4m+2)∈2Z
(π/σ)_4(σ/π)_4=(-1)^[(p^2-1)/4][(q^2-1)/4]=1
例如:
(有問題:jacobi4(3,7)=-1<=>jacobi4(7,3)=1
jacobi4(3,11)=1<=>jacobi4(11,3)=-1
jacobi4(7,11)=-1<=>jacobi4(11,7)=1)
2.高斯素數π,σ都是-4n-3型的本原奇素數p,q∈{-3,-7,-11,……}
N(π)=p^2
N(σ)=q^2
[(p^2-1)/4][(q^2-1)/4]=[(-4n-2)(-4n-4)/4][(-4m-4)(-4m-2)/4]=(n+1)(m+1)(4n+2)(4m+2)∈2Z
(π/σ)_4(σ/π)_4=(-1)^[(p^2-1)/4][(q^2-1)/4]=1
例如:
(jacobi4(-3,-7)=-1<=>jacobi4(-7,-3)=-1
J4(-3,-7)、J4(-7,-3)=i或-i中的哪一個?)
二次互反律:對奇素數p,q,(p/q)*(q/p)=(-1)^((p-1)/2*(q-1)/2)
(p/q)*(q/p)=(-1)^((p-1)/2*(q-1)/2)=(-1)^[(4n+2)(4m+2)/4]=(-1)^(4nm+1+2m+2n)=-1
例如:
jacobi(3,7)=-1<=>jacobi(7,3)=1
jacobi(3,11)=1<=>jacobi(11,3)=-1
jacobi(7,11)=-1<=>jacobi(11,7)=1
對奇素數-p,-q,
(p/q)*(q/p)=(-1)^((p-1)/2*(q-1)/2)=(-1)^[(-4n-4)(-4m-4)/4]=1
例如:
jacobi(-3,-7)=-1<=>jacobi(-7,-3)=-1
/*
> jacobi(13,17)
1
> jacobi(5,17)
-1
> jacobi(1,5)
1
> jacobi(2,5)
-1
> jacobi(3,5)
-1
> jacobi(4,5)
1
> jacobi(7,5)
-1
> jacobi(8,5)
-1 c:\>javac jacobiN.java
c:\>java jacobiN
jacobi(13,17)=1
jacobi(5,17)=-1
jacobi(1,5)=1
jacobi(2,5)=-1
jacobi(3,5)=-1
jacobi(4,5)=1
jacobi(7,5)=-1
jacobi(8,5)=-1
jacobi4(13,17)=1
jacobi4(5,17)=-1
jacobi4(1,5)=1
jacobi4(2,5)=-1
jacobi4(3,5)=-1
jacobi4(4,5)=-1
jacobi4(7,5)=-1
jacobi4(8,5)=-1
jacobi3(13,17)=1
jacobi3(5,17)=1
jacobi3(1,5)=1
jacobi3(2,5)=1
jacobi3(3,5)=1
jacobi3(4,5)=1
jacobi3(7,5)=1
jacobi3(8,5)=1
*/ public class jacobiN{
?
/*
按定義計算二次剩余和二次非剩余
x=8,(13/17)=1
x=無解,(5/17)=-1
*/
public static int Legendre(int a,int p)
{
?if(a%p==0)
??return 0;//a是p的倍數
?for(int i=1;i<p;i++)
?{
??? if((i*i-a)%p==0)
??? {
???? return 1;//a是p的二次剩余
??? }
?}
??? return -1;//a是p的二次非剩余
} public static int Gauss(int a,int p)
{
?if(a%p==0)
??return 0;//a是p的倍數
?for(int i=1;i<p;i++)
?{
?????????? if((i*i*i*i-a)%p==0)
??? {
???? return 1;//a是p的四次剩余
??? }
?}
??? return -1;//a是p的四次非剩余
}
public static int Eisenstein(int a,int p)
{
?if(a%p==0)
??return 0;//a是p的倍數
?for(int i=1;i<p;i++)
?{
?????????? if((i*i*i-a)%p==0)
??? {
???? return 1;//a是p的三次剩余
??? }
?}
??? return -1;//a是p的三次非剩余
}?
?public static void main(String args[]){
??jacobiN j1=new jacobiN();
??????????????? {
??????????????????? int a[]={13,5};
??????????????????? int p=17;
??????????????????? for(int i=0;i<2;i++)
??????????????????? {
???????????????????????? int ret=Legendre(a[i],p);
???????????????????????? System.out.printf("jacobi(%d,%d)=%d\n",a[i],p,ret);
??????????????????? }
???????????????? }
??????????????? {
??????????????????? int a[]={1,2,3,4,7,8};
??????????????????? int p=5;
??????????????????? for(int i=0;i<6;i++)
??????????????????? {
???????????????????????? int ret=Legendre(a[i],p);
???????????????????????? System.out.printf("jacobi(%d,%d)=%d\n",a[i],p,ret);
??????????????????? }
???????????????? }
??????????????? {
??????????????????? int a[]={13,5};
??????????????????? int p=17;
??????????????????? for(int i=0;i<2;i++)
??????????????????? {
???????????????????????? int ret=Gauss(a[i],p);
???????????????????????? System.out.printf("jacobi4(%d,%d)=%d\n",a[i],p,ret);
??????????????????? }
???????????????? }
??????????????? {
??????????????????? int a[]={1,2,3,4,7,8};
??????????????????? int p=5;
??????????????????? for(int i=0;i<6;i++)
??????????????????? {
???????????????????????? int ret=Gauss(a[i],p);
???????????????????????? System.out.printf("jacobi4(%d,%d)=%d\n",a[i],p,ret);
??????????????????? }
???????????????? }
??????????????? {
??????????????????? int a[]={13,5};
??????????????????? int p=17;
??????????????????? for(int i=0;i<2;i++)
??????????????????? {
???????????????????????? int ret=Eisenstein(a[i],p);
???????????????????????? System.out.printf("jacobi3(%d,%d)=%d\n",a[i],p,ret);
??????????????????? }
???????????????? }
??????????????? {
??????????????????? int a[]={1,2,3,4,7,8};
??????????????????? int p[]={5};
??????????????????? for(int i=0;i<6;i++)
??????????????????? for(int j=0;j<1;j++)
??????????????????? {
???????????????????????? int ret=Eisenstein(a[i],p[j]);
???????????????????????? System.out.printf("jacobi3(%d,%d)=%d\n",a[i],p[j],ret);
??????????????????? }
???????????????? }
?}
?
}
高斯和及歐拉數http://www.docin.com/p-276938834.html
論文摘要:本文研究了廣義k次高斯和的均值及歐拉數的一些同余式問題。通過研究廣義二次高斯和的四次均值,得到與Weil估計相聯系的一個有趣的等式。根據這一恒等式,我們解決了廣義二次高斯和的高次均值方面的一個公開問題。利用剩余系和特征和的性質,我們還給出了廣義k次高斯和的一些準確的均值公式,從而部分解決了廣義k次高斯和高次均值方面的一個公開問題。最后,利用歐拉數、伯努利數及其多項式之間的關系和性質,我們對歐拉數的兩個猜想也作了深入研究,建立了歐拉數及伯努利數模一個奇素數冪的一些精確的同余式。從而對目前國內外在這方面所得到的一些結果給出了一個更為簡單的證明。??
關鍵詞:高斯和,均值,Weil估計,歐拉數,伯努利數,同余
目錄?
引言
1高斯和
1.1特征的定義及基本性質?
1.2高斯和的定義及基本性質
2廣義k次高斯和的均值問題
2.1引言?
2.2廣義二次高斯和的均值
2.3廣義k次高斯和的均值
2.4待解決的問題
3歐拉數的同余式問題
3.1引言
3.2歐拉數的兩個猜想
3.3歐拉數的一些有趣的同余式
3.4待解決的問題
引言? 高斯和除了在證明著名的二次互反律、三次互反律、四次互反律等方面是有用的工具外,在代數編碼、橢圓曲線等應用方面也發揮著重要的作用(見文[2]和[49])。歐拉數及相關的伯努利數出現在數學的許多不同分支中,在數論中尤為重要,它們與數論中的p-adic分析理論,Dirichlet L-函數理論和分圓域上的理想類群理論緊密聯系在一起(見文[27]和[34]和[10])。本文從張文鵬教授提出的廣義k次高斯和高次均值方面的兩個公開問題及加拿大數學家R.K.Guy在文[12]的問題B45中對歐拉數提出的兩個猜想出發,得到本文后兩章所包含的廣義k次高斯和的高次均值公式和歐拉數、伯努利數模奇素數冪的一些精確的同余式。
第一章 高斯和
1.1特征的定義及基本性質
如果有限域F_p上的一個復值函數χ滿足:
……則稱χ為有限域F_p上的乘法特征。
從乘法特征的定義可知,勒讓德符號(a|p)是有限域F_p上的一個乘法特征。
另一個特征的例子是平凡特征,即對所有a∈F_p^*,χ(a)=1。這個特征叫做乘法主特征,記為χ_0。
顯然,F_p上的乘法特征把乘群的各類間的乘法運算,具體表示為復數間的乘法運算,這給我們研究問題時帶來了方便。為了便于討論,我們把有限域F_p上的乘法特征的定義域加以擴展為:如果χ=χ_0是乘法主特征,那么χ(0)=1;如果χ≠χ_0,那么χ(0)=0。
定義1.1.2設m是正整數,……
以這種方式定義的χ叫做模m的Dirichlet特征。
由以上定義可知,勒讓德符號(a|p)是模p的一個Dirichlet特征。為研究Dirichlet特征的性質,我們考慮一個更一般的問題。
定義1.1.3設G是一個群,如果G上的一個復值函數f滿足:
……
則稱f為G的一個特征。
顯然,每一個群G至少有一個特征,它就是在G上取值恒等于1的函數。這個特征稱為主特征。下面一個命題告訴我們:如果G是群并且有有限階n>1,那么它還有另外的特征。
命題1.1.5階為n的有限Abel群有且僅有n個不同的特征。
現令G是一個階為n的有限Abel群,G的主特征用f_1表示,其余n-1個特征用f_2,…f_n表示,稱為非主特征。
1.2高斯和的定義及基本性質
在給出經典的二次高斯和的定義及基本性質之前,我們先考慮著名的三角和公式。
命題1.2.1設k是正整數,那么
∑[m=0->k-1]e^(2piimn/k)=k(k|n)或0(k!|n)。
定義1.2.1:令p是一個奇素數,ζ=e^(2pii/p)。則g_a=∑[t=0->p-1](t|p)ζ^(at)叫做二次高斯和,其中(t|p)是勒讓德符號。
命題1.2.2 g_a=(a|p)g_1。
命題1.2.3 g^2 =((-1)^((p-1)/2)))p。
命題1.2.4
g_1=sqrt(p),p≡1(mod4);
g_1=isqrt(p),p≡3(mod4)。
【
20140512二次高斯和的程序計算數據:
p=3時,g_0=0,g_1=sqrt(3)i,g_2=-sqrt(3)i
g^2=((-1)^1)3=-3
p=5時,g_0=0,g_1=sqrt(5),g_2=-sqrt(5),g_3=-sqrt(5),g_4=sqrt(5)
g^2=((-1)^2)5=5
p=7時,g_0=0,g_1=sqrt(7)i,g_2=sqrt(7)i,g_3=-sqrt(7)i,g_4=sqrt(7)i,g_5=-sqrt(7)i,g_6=-sqrt(7)i
g^2=((-1)^3)7=-7
p=11時,g_0=0,g_1=sqrt(11)i,g_2=-sqrt(11)i,g_3=sqrt(11)i,g_4=sqrt(11)i,g_5=sqrt(11)i,g_6=-sqrt(11)i,g_7=-sqrt(11)i,g_8=-sqrt(11)i,
g_9=sqrt(11)i,g_10=-sqrt(11)i
g^2=((-1)^5)11=-11
p=13時,g_0=0,g_1=sqrt(13)
g^2=((-1)^6)13=13
p=17時,g_0=0,g_1=sqrt(17),g_5=-sqrt(17),g_13=sqrt(17)
(5/17)=-1
(13/17)=1
g^2=((-1)^8)17=17
#include <iostream>
#include <complex>
using namespace std; int Legendre(int t,int p)
{
?if(t%p==0)
??return 0;//t是p的倍數
?int ret=-1;
?for(int i=1;i<p;i++)
?{
??if((i*i-t)%p==0)
??{
???return 1;
??}
?}
?return -1;//t是p的二次非剩余
} complex<double> Zeta(int p)
{
?const double pi=3.14159265358979323846;//4*atan2((double)1,1);//
?complex<double> z=std::exp(complex<double>(0,2*pi/p));
?return z;
} complex<double> gauss(int a,int p)
{
?complex<double> z(0,0);
?for(int t=0;t<p;t++)
?{
??complex<double> z1=std::pow(Zeta(p),a*t);
??z+=complex<double>(Legendre(t,p),0)*z1;
?}
?return z;
} int main(int argc, char* argv[])
{
#if 1
?int primes[12]={2,3,5,7,11,13,17,19,23,29,31,37};
?for(int i=0;i<12;i++)
?{
??int p=primes[i];
??????? for(int a=0;a<p;a++)
??{
???cout<<"gauss(a="<<a<<",p="<<p<<")="<<gauss(a,p)<<endl;
??}
?}
#endif system("pause");
?return 0;
}
】
關于四次高斯和的六次均值http://www.docin.com/p-716077328.html
目錄
摘要
第一章引言
第二章基礎知識
2.1Dirichlet特征的基本性質
2.2Gauss和的基本性質
第三章四次高斯和的六次均值
3.1簡述及主要結果
3.2四次高斯和的均值公式 第2章基礎知識
§2.1Dirichlet特征的基本性質
定義2.1.1設g是模m的原根,(a,m)=1。我們把使g^e≡a(modm)成立的e稱為是a以原根g為底對模m的指標,記作e=ind_(m,g)a=ind_(m)a。
指標e對模φ(m)是唯一確定的,且有ind_(m,g)ab= ind_(m,g)a+ ind_(m,g)b(modφ(m))。
定義2.1.3……稱為是模m的積性特征(簡稱模m的特征)或Dirichlet特征。
顯見,兩個模m的特征的乘積仍然是模m的特征。
χ(a)全取實值的特征稱為實特征,不然,稱為復特征。
χ(-1)=1的特征χ叫做偶特征,χ(-1)=-1的特征χ叫做奇特征。
(a,m)=1時,χ(a)=1;(a,m)≠1時,χ(a)=0。
稱為是模m的主特征,記作χ_0(a)=χ_0(a,m)。
定義2.15:使(χ(a,m))^d=1,(a,m)=1成立的最小正整數d稱為模m的積性特征χ(a,m)的階。
由性質2.1.4知模m的積性特征的階一定是φ(m)的除數。
§2.2Guass和的基本性質
定義2.2.1設m>=3為整數,我們把G(n,χ)=∑[a=1->m] χ(a)e(na/m)稱為關于特征χ的Gauss和。
特別地,記τ(x)=G(1,x)= =∑[a=1->m] χ(a)e(a/m),其中e(y)=e^(2piiy),χ表示模m的Dirichlet特征。
顯然,若χ是模p的二次特征,我們容易得到
τ(χ)=sqrt(p),p≡1(mod4);
τ(χ)=isqrt(p),p≡3(mod4)。
定義2.2.2:我們把J(χ_1,χ_2)=∑[m,nmodp,m+n≡1(modp)] χ_1(n)χ_2(n)稱為關于特征χ_1,χ_2的Jacobi和。
/*
(2,1)|(5,0),(5,0)=(2,1)*(2,-1)
gcd((5,0),(2,1))=(2,1)
simple_gcd((5,0),(2,1))=(2,1)
extended_gcd((5,0),(2,1))=(2,1),x=(0,0),y=(1,0)
gcd((7,5),(18,5))=(0,-1)
simple_gcd((7,5),(18,5))=(0,-1)
extended_gcd((7,5),(18,5))=(0,-1),x=(-1,-9),y=(-1,4)
gcd((112,1),(-57,79))=(4,7)
simple_gcd((112,1),(-57,79))=(4,7)
extended_gcd((112,1),(-57,79))=(4,7),x=(-1,-6),y=(5,-5)
*/
#if 1
?std::complex<float> af(5,0);
?std::complex<float> bf(2,1);
?std::complex<float> cf=af/bf;
??? std::complex<long> a(5,0);
??? std::complex<long> b(2,1);
?std::complex<long> c=Div(a,b);//不要寫a/b;
?std::complex<long> cb=c*b;
?if(a==cb)
?{
??cout<<b<<"|"<<a<<","<<a<<"="<<b<<"*"<<c<<endl;
?}
?std::complex<long> q,r;
?bool bret=divide(a,b,q,r); {
??std::complex<long> a[]={std::complex<long>(5,0),std::complex<long>(7,5),std::complex<long>(112,1)};
??std::complex<long> b[]={std::complex<long>(2,1),std::complex<long>(18,5),std::complex<long>(-57,79)};
??for(int i=0;i<3;i++)
??{
???//cout<<"abs:"<<abs(a[i])<<","<<abs(b[i])<<endl;
???//cout<<"Norm:"<<Norm(a[i])<<","<<Norm(b[i])<<endl;
???std::complex<long> ret=gcd(a[i],b[i]);
???cout<<"gcd("<<a[i]<<","<<b[i]<<")="<<ret<<endl;
???std::complex<long> ret1=simple_gcd(a[i],b[i]);
???cout<<"simple_gcd("<<a[i]<<","<<b[i]<<")="<<ret1<<endl;
???std::complex<long> x,y;
???std::complex<long> ret2=extended_gcd(a[i],b[i],x,y);
???cout<<"extended_gcd("<<a[i]<<","<<b[i]<<")="<<ret2<<",x="<<x<<",y="<<y<<endl;
??}
?}
#endif
std::complex<long> Div(const std::complex<long> &a,const std::complex<long> &b)
{
?std::complex<float> af(a.real(),a.imag());
?std::complex<float> bf(b.real(),b.imag());
?std::complex<float> cf=af/bf;
?long cr=cf.real()>0?(long)(cf.real()+0.5):(long)(cf.real()-0.5);
?long ci=cf.imag()>0?(long)(cf.imag()+0.5):(long)(cf.imag()-0.5);
?std::complex<long> c(cr,ci);
?return c;
} bool divide(const std::complex<long>& a, const std::complex<long>& b,std::complex<long>& q, std::complex<long>& r)
{
? //long qr = floor((a/b).real() + 0.5);
? //long qi = floor((a/b).imag() + 0.5);
? //q = std::complex<long>(qr,qi);
? q=Div(a,b);
? r = a - q*b;
? bool bret=(r==std::complex<long>(0,0));
? return bret;
} long Norm(const std::complex<long>& a)
{
?return (a.real()*a.real()+a.imag()*a.imag());
} std::complex<long> gcd(const std::complex<long>& a, const std::complex<long>& b)
{
?std::complex<long> x = a, y = b;
?//if(abs(x)<abs(y) )
?if(Norm(x)<Norm(y) )
?{
??std::swap(x,y);
?}
?while ( y != std::complex<long>(0,0) ) {
??std::complex<long> q,r;
??bool ret=divide(x,y,q,r);
??x = y;
??y = r;
?}
?return x;
} std::complex<long> simple_gcd(const std::complex<long>& a, const std::complex<long>& b)
{ std::complex<long> aa = a, bb = b; //if ( abs(aa) < abs(bb) )
? if(Norm(aa)<Norm(bb) )
? {
????? std::swap(aa,bb);
?? } //while ( abs(bb) != 0)
? while(bb != std::complex<long>(0,0))
?? {
????? std::complex<long> qq, rr;
????? bool bret=divide (aa, bb, qq, rr);
????? aa = bb;
????? bb = rr;
?? } return aa;
} std::complex<long> extended_gcd(const std::complex<long>& a, const std::complex<long>& b,std::complex<long>& x, std::complex<long>& y)
{
?std::complex<long> aa = a, bb = b;
?bool swapped = false;
?//if( abs(aa) < abs(bb) )
?if(Norm(aa)<Norm(bb) )
?{
??std::swap(aa,bb);
??swapped = true;
?}
?std::complex<long> xx = 0, lx = 1, yy = 1, ly = 0;
?do
?{
??std::complex<long> qq, rr;
??bool bret=divide (aa, bb, qq, rr);
??aa = bb; bb = rr; std::complex<long> tx = lx - qq*xx;
??lx = xx; xx = tx; std::complex<long> ty = ly - qq*yy;
??ly = yy; yy = ty;
?}while (bb != std::complex<long>(0,0)); x = lx;
?y = ly;
?if (swapped)
?{
??std::swap(x,y);
?} return aa;
}
在高斯整數環(The ring of Gaussian integers)Z[i]={a+bi|a,b∈Z}——環(Z[i],+,·)中2+3i生成的理想((2+3i))由以下元素組成: (2+3i)(a+bi)=(2a-3b)+(3a+2b)i,a,b∈Z。 但由2+3i生成的子環<2+3i>是由以下元素組成: (2+3i)f(2+3i),f(x)∈Z[x] (2+3i)f(2+3i)=(2+3i)(2c+d+3ci),c,d∈Z。 <2+3i>{<}((2+3i)) 子環<2+3i>不是理想 在環(Z[i],+,·)中,它的子環Z就不是理想。
求7+5i和18+5i的最大公因數: 1=(9-i)(7+5i)+(-4-i)(18+5i)。 求112+i和-57+79i的最大公因數: (112+i,-57+79i)=4+7i。 求a=1734+1938i的素因子分解式。 a=i(1+i)^3·3·(1+2i)^2·(2+3i)·(1+4i)·(1-4i)
在復數域C、高斯整數環Z[i]內的整數相除結果:
'(4+8j)/(7+9j)=0.76923+0.1538j
'(471+643j)/(9+11j)=56+3j
算式解析
(4+8i)/(7+9i)
ans = 0.769230769230769 + 0.153846153846154i
(471+643i)/(9+11i)
ans = 56 + 3i
/*
第1個偶素數:(1,1)
第2個偶素數:(-1,1)
第3個偶素數:(-1,-1)
第4個偶素數:(1,-1)
*/
#if 1
?static std::complex<long> k[4]={std::complex<long>(1,0),std::complex<long>(0,1),std::complex<long>(-1,0),std::complex<long>(0,-1)};
?std::complex<long> evenP(1,1);
?for(int i=0;i<4;i++)
?{
??? std::complex<long> kP=k[i]*evenP;
??? cout<<"第"<<(i+1)<<"個偶素數:"<<kP<<endl;
?}
#endif
Z[i]是可數集,每一個高斯整數a+bi存在一個固定的編號f_1234(a,b);而下面這里的編號是f_14(a,b),不是f_1234(a,b)。
下面考慮第一、四象限內a,b∈[0,9]的高斯整數,二、三象限內的高斯整數是這些高斯整數對應的相伴數。
第1-134個高斯合數:(0,0),(0,1),(0,-1),(0,2),(0,-2),(0,4),(0,-4),(0,5),(0,-5),(0,6),(0,-6),(0,8),(0,-8),(0,9),(0,-9),(1,0),(1,3),(1,-3),(1,5),(1,-5),(1,7),(1,-7),(1,8),(1,-8),(1,9),(1,-9),(2,0),(2,2),(2,-2),(2,4),(2,-4),(2,6),(2,-6),(2,8),(2,-8),(2,9),(2,-9),(3,1), (3,-1),(3,3),(3,-3),(3,4),(3,-4),(3,5),(3,-5),(3,6),(3,-6),(3,7),(3,-7),(3,9),(3,-9),(4,0),(4,2),(4,-2),(4,3),(4,-3), (4,4),(4,-4),(4,6),(4,-6),(4,7),(4,-7),(4,8),(4,-8),(5,0),(5,1),(5,-1),(5,3),(5,-3),(5,5),(5,-5),(5,7),(5,-7),(5,9),(5,-9),(6,0),(6,2),(6,-2),(6,3),(6,-3),(6,4),(6,-4),(6,6),(6,-6),(6,7),(6,-7),(6,8),(6,-8),(6,9),(6,-9),(7,1),(7,-1),(7,3),(7,-3),(7,4),(7,-4),(7,5),(7,-5),(7,6),(7,-6),(7,7),(7,-7),(7,9),(7,-9),(8,0),(8,1),(8,-1),(8,2),(8,-2),(8,4),(8,-4),(8,6),(8,-6),(8,8),(8,-8),(8,9),(8,-9),(9,0),(9,1),(9,-1),(9,2),(9,-2),(9,3),(9,-3),(9,5),(9,-5),(9,6),(9,-6),(9,7),(9,-7),(9,8),(9,-8),(9,9),(9,-9)
第1-56個高斯素數:(0,3),(0,-3),(0,7),(0,-7),(1,4),(1,1),(1,-1),(1,2),(1,-2),(1,-4),(1,6),(1,-6),(2,1),(2,-1),(2,3),(2,-3),(2,5),(2,-5),(2,7),(2,-7),(3,0),(3,2),(3,-2),(3,8),(3,-8),(4,1),(4,-1),(4,5),(4,-5),(4,9),(4,-9),(5,2),(5,-2),(5,4),(5,-4),(5,6),(5,-6),(5,8),(5,-8),(6,1),(6,-1),(6,5),(6,-5),(7,0),(7,2),(7,-2),(7,8),(7,-8),(8,3),(8,-3),(8,5),(8,-5),(8,7),(8,-7),(9,4),(9,-4)
第1-23個奇本原數:(1,0),(1,4),(1,-4),(1,8),(1,-8),(3,2),(3,-2),(3,6),(3,-6),(5,0),(5,4),(5,-4),(5,8),(5,-8),(7,2),(7,-2),(7,6),(7,-6),(9,0),(9,4),(9,-4),(9,8),(9,-8)
一四象限
第1個本原奇素數:(1,4)
第2個本原奇素數:(1,-4)
第3個本原奇素數:(3,2)
第4個本原奇素數:(3,-2)
第5個本原奇素數:(5,4)
第6個本原奇素數:(5,-4)
第7個本原奇素數:(5,8)
第8個本原奇素數:(5,-8)
第9個本原奇素數:(7,2)
第10個本原奇素數:(7,-2)
第11個本原奇素數:(9,4)
第12個本原奇素數:(9,-4)
一二三四象限 第1個本原奇素數:(-1,2)
第2個本原奇素數:(-1,-2)
第3個本原奇素數:(1,4)
第4個本原奇素數:(1,-4)
第5個本原奇素數:(-1,6)
第6個本原奇素數:(-1,-6)
第7個本原奇素數:(-3,0)
第8個本原奇素數:(3,2)
第9個本原奇素數:(3,-2)
第10個本原奇素數:(-3,8)
第11個本原奇素數:(-3,-8)
第12個本原奇素數:(-5,2)
第13個本原奇素數:(-5,-2)
第14個本原奇素數:(5,4)
第15個本原奇素數:(5,-4)
第16個本原奇素數:(-5,6)
第17個本原奇素數:(-5,-6)
第18個本原奇素數:(5,8)
第19個本原奇素數:(5,-8)
第20個本原奇素數:(-7,0)
第21個本原奇素數:(7,2)
第22個本原奇素數:(7,-2)
第23個本原奇素數:(-7,8)
第24個本原奇素數:(-7,-8)
第25個本原奇素數:(9,4)
第26個本原奇素數:(9,-4)
命題2.1:設p是一個正奇素數,則
p是分歧的<=>p|d,
p是分裂的<=>(d/p)=+1,
p是慣性的<=>(d/p)=-1。
類似地,
p=2是分歧的<=>d≡0 mod4,
p=2是分裂的<=>d≡1 mod8,
p=2是慣性的<=>d≡5 mod8。
這個分解定律可以簡單地表示為克羅內克符號(d/p)。
判別式為d的二次數域k=Q(sqrt(d))
①(d/p)=+1,若p在Q(sqrt(d))中是分裂的
②(d/p)=0,若p在Q(sqrt(d))中是分歧的
③(d/p)=-1,若p在Q(sqrt(d))中是慣性的
對于奇素數p!|d,這個符號與勒讓德符號是相符的。
§3.3 Z[i]中的算術
§3.3A Z[i]中的整除
Z[i]的分式域是Q(i)。
~α=r-si稱為α=r+si在域Q(i)中的共軛數,當α∈Q時,~α=α。
整環Z[i]中僅有四個單位元素,也稱為單位數:1,i,-1,-i。
定義1:設α=r+si∈Q(i),我們把T(α)=T_i(α)=α+~α=2r稱為α在域Q(i)中的跡;把N(α)=N_i(α)=α~α=r^2+s^2稱為α在域Q(i)中的范數。
對定義1要注意的是當α等于有理數r時,它在Q(i)中的跡和范數分別是2r和r^2。
§3.3B Z[i]中的剩余系
定理8:設0≠μ=a+bi∈Z[i],那么,模μ的一個完全剩余系的元素個數R(μ)=N(μ),以及
x_m,n=m+ni,m=0,1,…,N(μ)/(a,b)-1,n=0,1,…,(a,b)-1,
是模μ的一個完全剩余系。----(a,b)是最大公約數
例5:求模2+3i的完全剩余系、既約剩余系。
N(2+3i)=13,所以2+3i是素數。因此完全剩余系是0,1,…,12;既約剩余系是1,2,…,12,φ(2+3i)=12。
例6:求模3+6i的完全剩余系和既約剩余系。
3+6i=3(1+2i),3,1+2i都是素數,它們是互素的。
3+6i的完全剩余系是:m+ni,m=0,1,…,14,n=0,1,2。
3的既約剩余系是:m_1+n_1i,0<=m_1,n_1<=2,m_1+n_1≠0。
1+2i的既約剩余系是:m_2,m_2=1,…,4。
因此,3+6i的既約剩余系:6m_2+(-5)(m_1+n_1i),φ(3+6i)=φ(3)φ(1+2i)=20。
定義1:設α∈Z[i],若2!|N_i(α), 則稱α為偶整數;若2|N_i(α), 則稱α為奇整數。——這個說反了吧
Z[i]是Euclid整環,僅有的偶素數就是1+i及其相伴數。
設β是奇整數,它的四個相伴數是β,iβ,-β,-iβ。
定義2:一個奇整數β∈Z[i]稱為是Z[i]中的本原數,如果滿足β≡1(mod(1+i)^3)。
一個偶整數α≠0稱為是Z[i]中的本原數,如果它的表示式α=(1+i)^kβ中的奇整數β是本原數;0也看作是Z[i]中的本原數。 由定義立即推出:本原數的乘積一定是本原數;非零的本原數乘非本原數一定是非本原數;不同的本原數是互不相伴的。
這樣Z[i]中的全體本原數就給出了Z[i]的一個代表集合,把它記作Z_0[i]。
下面的定理對判斷奇本原數是有用的。
定理1:設β=a+bi∈Z[i],那么它是奇本原數的充要條件是2|b,a+b≡1(mod 4)。
本原偶素數是1+i,奇素數π=a+bi有兩種情形。一是π和有理素數q≡3(mod 4)相伴,這時由定理1知,π=-q,是Z[i]中的本原奇素數;一種是N(π)=p,p≡1(mod 4)是有理素數,因此滿足p=a^2+b^2,由定理1知恰好給出一對共軛的本原奇素數(不相伴):π=a+bi,~π=a-bi。
例如,p=17給出本原奇素數1±4i,p=5給出本原奇素數-1±2i。
由于對任一奇整數β∈Z[i]必有β≡1(mod(1+i)),
所以同余方程ξ^n≡β(mod(1+i))總有解。因而我們在Z[i]中只要討論以奇素數為模的二次、四次剩余特征。為簡單起見在本節中記
(α,π)_2=(α,π)_(2,Z[i]),
(α,π)_4=(α,π)_(4,Z[i]),
并約定模π一定是本原奇素數。
對任意的(α,β)=1,有α^(φ(π))≡1(mod π),
由于π是奇素數,因此,
(α,π)_2≡α^(φ(π)/2)≡±1(mod π)有且僅有一種情形成立。由于0,1,-1本身對乘法是封閉的,所以Z[i]中的二次剩余特征可直接定義為
(α,π)_2=1,α是模π的二次剩余,
(α,π)_2=-1,α是模π的二次非剩余,
(α,π)_2=0,π|α。
復數9 + 11i乘以56 + 3i的積為復數471 + 643i
復數9 + 11ω乘以56 + 3ω的積為復數471 + 610ω
'以下是計算高斯整數乘積和艾森斯坦整數乘積的vbs代碼
function eMul(z1,z2)
z3e = array(0,0)
'或dim z3e(2)
z3e(0)=z1(0)*z2(0)-z1(1)*z2(1)
z3e(1)=z1(0)*z2(1)+z1(1)*z2(0)-z1(1)*z2(1)
eMul=z3e
end function function eStr(z)
s=z(0) & " + " & z(1) & "ω"
eStr=s
end function function gMul(z1,z2)
z3 = array(0,0)
'或dim z3(2)
z3(0)=z1(0)*z2(0)-z1(1)*z2(1)
z3(1)=z1(0)*z2(1)+z1(1)*z2(0)
gMul=z3
end function function gStr(z)
s=z(0) & " + " & z(1) & "i"
gStr=s
end function function MulStr(z1,z2,z3)
s="復數" & z1 & "乘以" & z2 & "的積為復數" & z3
MulStr=s
end function z1=array(9,11)
z2=array(56,3)
z3=gMul(z1,z2)
z3e=eMul(z1,z2)
'MsgBox z3(0) & " + " & z3(1) & "i"
sg=MulStr(gStr(z1),gStr(z2),gStr(z3))
se=MulStr(eStr(z1),eStr(z2),eStr(z3e))
MsgBox sg
MsgBox se my_date1=date
my_date2 = DatePart("yyyy",my_date1) & "-" & Right("0" & DatePart("m",my_date1), 2) & "-" & Right("0" & DatePart("d",my_date1),2)
Const ForAppending = 8
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objTextFile = objFSO.OpenTextFile(my_date2 & ".txt", ForAppending, True, -1)
objTextFile.WriteLine sg
objTextFile.WriteLine se
objTextFile.Close
整數環、高斯整數環、艾森斯坦整數環、某個代數整數環是可數的。
a+bω的共軛為a+bω^2
a+bω和a+bω^2的范數都為(a+bω)(a+bω^2)=a^-ab+b^2
a+bω的6個相伴元:a+bω,-a-bω,-b+(a-b)ω,b+(b-a)ω,(b-a)-aω,(a-b)+aω,范數都是a^-ab+b^2
1+0ω=(1,0) ? ?1+0ω^2=(1,0) -1+0ω=(-1,0) ? ?-1+0ω^2=(-1,0) 0+1ω=(-0.5,0.866025) ? ?0+1ω^2=(-0.5,-0.866026) 0+-1ω=(0.5,-0.866025) ? ?0+-1ω^2=(0.5,0.866026) 1+1ω=(0.5,0.866025) ? ?1+1ω^2=(0.5,-0.866026) 1+-1ω=(1.5,-0.866025) ? ?1+-1ω^2=(1.5,0.866026) 4+3ω=(2.5,2.59808) ? ?4+3ω^2=(2.5,-2.59808) 5+4ω=(3,3.4641) ? ?5+4ω^2=(3,-3.4641) 0+0ω=(0,0) ? ?0+0ω^2=(0,0)
復數模不超過6.9282且范數不超過48的艾森斯坦整數共有81個。
應該是:|a|,|b|<=4的艾森斯坦整數共有81個。
第0個艾森斯坦整數是0+0ω=(0,0)不是艾森斯坦素數 復數模:0范數:0
第1個艾森斯坦整數是1+0ω=(1,0)不是艾森斯坦素數 復數模:1范數:1
第2個艾森斯坦整數是1+1ω=(0.5,0.866025)不是艾森斯坦素數 復數模:1范數:1
第3個艾森斯坦整數是0+1ω=(-0.5,0.866025)不是艾森斯坦素數 復數模:1范數:1
第4個艾森斯坦整數是-1+0ω=(-1,0)不是艾森斯坦素數 復數模:1范數:1
第5個艾森斯坦整數是-1+-1ω=(-0.5,-0.866025)不是艾森斯坦素數 復數模:1范數:1
第6個艾森斯坦整數是0+-1ω=(0.5,-0.866025)不是艾森斯坦素數 復數模:1范數:1
第7個艾森斯坦整數是2+1ω=(1.5,0.866025)是艾森斯坦素數 復數模:1.73205范數:3
第8個艾森斯坦整數是1+2ω=(-1.19209e-007,1.73205)是艾森斯坦素數 復數模:1.73205范
數:3
第9個艾森斯坦整數是-1+1ω=(-1.5,0.866025)是艾森斯坦素數 復數模:1.73205范數:3
第10個艾森斯坦整數是-2+-1ω=(-1.5,-0.866025)是艾森斯坦素數 復數模:1.73205范數:3 第11個艾森斯坦整數是-1+-2ω=(1.19209e-007,-1.73205)是艾森斯坦素數 復數模:1.7320
5范數:3
第12個艾森斯坦整數是1+-1ω=(1.5,-0.866025)是艾森斯坦素數 復數模:1.73205范數:3
第13個艾森斯坦整數是2+0ω=(2,0)是艾森斯坦素數 復數模:2范數:4
第14個艾森斯坦整數是2+2ω=(1,1.73205)是艾森斯坦素數 復數模:2范數:4
第15個艾森斯坦整數是0+2ω=(-1,1.73205)是艾森斯坦素數 復數模:2范數:4
第16個艾森斯坦整數是-2+0ω=(-2,0)是艾森斯坦素數 復數模:2范數:4
第17個艾森斯坦整數是-2+-2ω=(-1,-1.73205)是艾森斯坦素數 復數模:2范數:4
第18個艾森斯坦整數是0+-2ω=(1,-1.73205)是艾森斯坦素數 復數模:2范數:4
第19個艾森斯坦整數是3+1ω=(2.5,0.866025)是艾森斯坦素數 復數模:2.64575范數:7
第20個艾森斯坦整數是3+2ω=(2,1.73205)是艾森斯坦素數 復數模:2.64575范數:7
第21個艾森斯坦整數是2+3ω=(0.5,2.59808)是艾森斯坦素數 復數模:2.64575范數:7
第22個艾森斯坦整數是1+3ω=(-0.5,2.59808)是艾森斯坦素數 復數模:2.64575范數:7
第23個艾森斯坦整數是-1+2ω=(-2,1.73205)是艾森斯坦素數 復數模:2.64575范數:7
第24個艾森斯坦整數是-2+1ω=(-2.5,0.866025)是艾森斯坦素數 復數模:2.64575范數:7
第25個艾森斯坦整數是-3+-1ω=(-2.5,-0.866025)是艾森斯坦素數 復數模:2.64575范數:7 第26個艾森斯坦整數是-3+-2ω=(-2,-1.73205)是艾森斯坦素數 復數模:2.64575范數:7
第27個艾森斯坦整數是-2+-3ω=(-0.5,-2.59808)是艾森斯坦素數 復數模:2.64575范數:7
第28個艾森斯坦整數是-1+-3ω=(0.5,-2.59808)是艾森斯坦素數 復數模:2.64575范數:7
第29個艾森斯坦整數是1+-2ω=(2,-1.73205)是艾森斯坦素數 復數模:2.64575范數:7
第30個艾森斯坦整數是2+-1ω=(2.5,-0.866025)是艾森斯坦素數 復數模:2.64575范數:7
第31個艾森斯坦整數是3+0ω=(3,0)不是艾森斯坦素數 復數模:3范數:9
第32個艾森斯坦整數是3+3ω=(1.5,2.59808)不是艾森斯坦素數 復數模:3范數:9
第33個艾森斯坦整數是0+3ω=(-1.5,2.59808)不是艾森斯坦素數 復數模:3范數:9
第34個艾森斯坦整數是-3+0ω=(-3,0)不是艾森斯坦素數 復數模:3范數:9
第35個艾森斯坦整數是-3+-3ω=(-1.5,-2.59808)不是艾森斯坦素數 復數模:3范數:9
第36個艾森斯坦整數是0+-3ω=(1.5,-2.59808)不是艾森斯坦素數 復數模:3范數:9
第37個艾森斯坦整數是4+2ω=(3,1.73205)不是艾森斯坦素數 復數模:3.4641范數:12
第38個艾森斯坦整數是2+4ω=(-2.38419e-007,3.4641)不是艾森斯坦素數 復數模:3.4641
范數:12
第39個艾森斯坦整數是-2+2ω=(-3,1.73205)不是艾森斯坦素數 復數模:3.4641范數:12
第40個艾森斯坦整數是-4+-2ω=(-3,-1.73205)不是艾森斯坦素數 復數模:3.4641范數:12
第41個艾森斯坦整數是-2+-4ω=(2.38419e-007,-3.4641)不是艾森斯坦素數 復數模:3.464
1范數:12
第42個艾森斯坦整數是2+-2ω=(3,-1.73205)不是艾森斯坦素數 復數模:3.4641范數:12
第43個艾森斯坦整數是4+1ω=(3.5,0.866025)是艾森斯坦素數 復數模:3.60555范數:13
第44個艾森斯坦整數是4+3ω=(2.5,2.59808)是艾森斯坦素數 復數模:3.60555范數:13
第45個艾森斯坦整數是3+4ω=(1,3.4641)是艾森斯坦素數 復數模:3.60555范數:13
第46個艾森斯坦整數是1+4ω=(-1,3.4641)是艾森斯坦素數 復數模:3.60555范數:13
第47個艾森斯坦整數是-1+3ω=(-2.5,2.59808)是艾森斯坦素數 復數模:3.60555范數:13
第48個艾森斯坦整數是-3+1ω=(-3.5,0.866025)是艾森斯坦素數 復數模:3.60555范數:13
第49個艾森斯坦整數是-4+-1ω=(-3.5,-0.866025)是艾森斯坦素數 復數模:3.60555范數:1
3
第50個艾森斯坦整數是-4+-3ω=(-2.5,-2.59808)是艾森斯坦素數 復數模:3.60555范數:13 第51個艾森斯坦整數是-3+-4ω=(-1,-3.4641)是艾森斯坦素數 復數模:3.60555范數:13
第52個艾森斯坦整數是-1+-4ω=(1,-3.4641)是艾森斯坦素數 復數模:3.60555范數:13
第53個艾森斯坦整數是1+-3ω=(2.5,-2.59808)是艾森斯坦素數 復數模:3.60555范數:13
第54個艾森斯坦整數是3+-1ω=(3.5,-0.866025)是艾森斯坦素數 復數模:3.60555范數:13
第55個艾森斯坦整數是4+0ω=(4,0)不是艾森斯坦素數 復數模:4范數:16
第56個艾森斯坦整數是4+4ω=(2,3.4641)不是艾森斯坦素數 復數模:4范數:16
第57個艾森斯坦整數是0+4ω=(-2,3.4641)不是艾森斯坦素數 復數模:4范數:16
第58個艾森斯坦整數是-4+0ω=(-4,0)不是艾森斯坦素數 復數模:4范數:16
第59個艾森斯坦整數是-4+-4ω=(-2,-3.4641)不是艾森斯坦素數 復數模:4范數:16
第60個艾森斯坦整數是0+-4ω=(2,-3.4641)不是艾森斯坦素數 復數模:4范數:16
第61個艾森斯坦整數是-2+3ω=(-3.5,2.59808)是艾森斯坦素數 復數模:4.3589范數:19
第62個艾森斯坦整數是-3+2ω=(-4,1.73205)是艾森斯坦素數 復數模:4.3589范數:19
第63個艾森斯坦整數是2+-3ω=(3.5,-2.59808)是艾森斯坦素數 復數模:4.3589范數:19
第64個艾森斯坦整數是3+-2ω=(4,-1.73205)是艾森斯坦素數 復數模:4.3589范數:19
第65個艾森斯坦整數是-1+4ω=(-3,3.4641)不是艾森斯坦素數 復數模:4.58258范數:21
第66個艾森斯坦整數是-4+1ω=(-4.5,0.866025)不是艾森斯坦素數 復數模:4.58258范數:2
1
第67個艾森斯坦整數是1+-4ω=(3,-3.4641)不是艾森斯坦素數 復數模:4.58258范數:21
第68個艾森斯坦整數是4+-1ω=(4.5,-0.866025)不是艾森斯坦素數 復數模:4.58258范數:2
1
第69個艾森斯坦整數是-3+3ω=(-4.5,2.59808)不是艾森斯坦素數 復數模:5.19615范數:27 第70個艾森斯坦整數是3+-3ω=(4.5,-2.59808)不是艾森斯坦素數 復數模:5.19615范數:27 第71個艾森斯坦整數是-2+4ω=(-4,3.4641)不是艾森斯坦素數 復數模:5.2915范數:28
第72個艾森斯坦整數是-4+2ω=(-5,1.73205)不是艾森斯坦素數 復數模:5.2915范數:28
第73個艾森斯坦整數是2+-4ω=(4,-3.4641)不是艾森斯坦素數 復數模:5.2915范數:28
第74個艾森斯坦整數是4+-2ω=(5,-1.73205)不是艾森斯坦素數 復數模:5.2915范數:28
第75個艾森斯坦整數是-3+4ω=(-5,3.4641)是艾森斯坦素數 復數模:6.08276范數:37
第76個艾森斯坦整數是-4+3ω=(-5.5,2.59808)是艾森斯坦素數 復數模:6.08276范數:37
第77個艾森斯坦整數是3+-4ω=(5,-3.4641)是艾森斯坦素數 復數模:6.08276范數:37
第78個艾森斯坦整數是4+-3ω=(5.5,-2.59808)是艾森斯坦素數 復數模:6.08276范數:37
第79個艾森斯坦整數是-4+4ω=(-6,3.4641)不是艾森斯坦素數 復數模:6.9282范數:48
第80個艾森斯坦整數是4+-4ω=(6,-3.4641)不是艾森斯坦素數 復數模:6.9282范數:48
?// 按范數和輻角主值從小到大排列順序
?bool operator < (const eint &m)const
?{
??int norm1=m_a*m_a+m_b*m_b-m_a*m_b;
??int norm2=m.m_a*m.m_a+m.m_b*m.m_b-m.m_a*m.m_b;
??float arg1=atan2f(m_b,m_a);
??float arg2=atan2f(m.m_b,m.m_a);
??float pi=atan2f(0,-1);
??if(arg1<0)
???arg1+=2*pi;
??if(arg2<0)
???arg2+=2*pi;
??if(norm1!=norm2)
???return norm1<norm2;
??else
???return arg1<arg2;
?} // 按范數和輻角主值從小到大排列順序 bool operator < (const gint &m)const? { ? int norm1=m_a*m_a+m_b*m_b; ? int norm2=m.m_a*m.m_a+m.m_b*m.m_b; ? float arg1=atan2f(m_b,m_a); ? float arg2=atan2f(m.m_b,m.m_a); ? float pi=atan2f(0,-1); ? if(arg1<0) ? arg1+=2*pi; ? if(arg2<0) ? arg2+=2*pi; ? if(norm1!=norm2) ? return norm1<norm2; ? else return arg1<arg2; } 范數不超過36的高斯整數共有169個。
范數不超過100的高斯整數共有441個。
應該是:|a|,|b|<=6,10的高斯整數共有169,441個。
第0個高斯整數是0不是高斯素數 第1個高斯整數是1不是高斯素數 第2個高斯整數是1i不是高斯素數 第3個高斯整數是-1不是高斯素數 第4個高斯整數是-1i不是高斯素數 第5個高斯整數是1+1i是高斯素數 第6個高斯整數是-1+1i是高斯素數 第7個高斯整數是-1-1i是高斯素數 第8個高斯整數是1-1i是高斯素數 第9個高斯整數是2不是高斯素數 第10個高斯整數是2i不是高斯素數 第11個高斯整數是-2不是高斯素數 第12個高斯整數是-2i不是高斯素數 第13個高斯整數是2+1i是高斯素數 第14個高斯整數是1+2i是高斯素數 第15個高斯整數是-1+2i是高斯素數 第16個高斯整數是-2+1i是高斯素數 第17個高斯整數是-2-1i是高斯素數 第18個高斯整數是-1-2i是高斯素數 第19個高斯整數是1-2i是高斯素數 第20個高斯整數是2-1i是高斯素數 第21個高斯整數是2+2i不是高斯素數 第22個高斯整數是-2+2i不是高斯素數 第23個高斯整數是-2-2i不是高斯素數 第24個高斯整數是2-2i不是高斯素數 第25個高斯整數是3是高斯素數 第26個高斯整數是3i是高斯素數 第27個高斯整數是-3是高斯素數 第28個高斯整數是-3i是高斯素數 第29個高斯整數是3+1i不是高斯素數 第30個高斯整數是1+3i不是高斯素數 第31個高斯整數是-1+3i不是高斯素數 第32個高斯整數是-3+1i不是高斯素數 第33個高斯整數是-3-1i不是高斯素數 第34個高斯整數是-1-3i不是高斯素數 第35個高斯整數是1-3i不是高斯素數 第36個高斯整數是3-1i不是高斯素數 第37個高斯整數是3+2i是高斯素數 第38個高斯整數是2+3i是高斯素數 第39個高斯整數是-2+3i是高斯素數 第40個高斯整數是-3+2i是高斯素數 第41個高斯整數是-3-2i是高斯素數 第42個高斯整數是-2-3i是高斯素數 第43個高斯整數是2-3i是高斯素數 第44個高斯整數是3-2i是高斯素數 第45個高斯整數是4不是高斯素數 第46個高斯整數是4i不是高斯素數 第47個高斯整數是-4不是高斯素數 第48個高斯整數是-4i不是高斯素數 第49個高斯整數是4+1i是高斯素數 第50個高斯整數是1+4i是高斯素數 第51個高斯整數是-1+4i是高斯素數 第52個高斯整數是-4+1i是高斯素數 第53個高斯整數是-4-1i是高斯素數 第54個高斯整數是-1-4i是高斯素數 第55個高斯整數是1-4i是高斯素數 第56個高斯整數是4-1i是高斯素數 第57個高斯整數是3+3i不是高斯素數 第58個高斯整數是-3+3i不是高斯素數 第59個高斯整數是-3-3i不是高斯素數 第60個高斯整數是3-3i不是高斯素數 第61個高斯整數是4+2i不是高斯素數 第62個高斯整數是2+4i不是高斯素數 第63個高斯整數是-2+4i不是高斯素數 第64個高斯整數是-4+2i不是高斯素數 第65個高斯整數是-4-2i不是高斯素數 第66個高斯整數是-2-4i不是高斯素數 第67個高斯整數是2-4i不是高斯素數 第68個高斯整數是4-2i不是高斯素數 第69個高斯整數是5不是高斯素數 第70個高斯整數是4+3i不是高斯素數 第71個高斯整數是3+4i不是高斯素數 第72個高斯整數是5i不是高斯素數 第73個高斯整數是-3+4i不是高斯素數 第74個高斯整數是-4+3i不是高斯素數 第75個高斯整數是-5不是高斯素數 第76個高斯整數是-4-3i不是高斯素數 第77個高斯整數是-3-4i不是高斯素數 第78個高斯整數是-5i不是高斯素數 第79個高斯整數是3-4i不是高斯素數 第80個高斯整數是4-3i不是高斯素數 第81個高斯整數是5+1i不是高斯素數 第82個高斯整數是1+5i不是高斯素數 第83個高斯整數是-1+5i不是高斯素數 第84個高斯整數是-5+1i不是高斯素數 第85個高斯整數是-5-1i不是高斯素數 第86個高斯整數是-1-5i不是高斯素數 第87個高斯整數是1-5i不是高斯素數 第88個高斯整數是5-1i不是高斯素數 第89個高斯整數是5+2i是高斯素數 第90個高斯整數是2+5i是高斯素數 第91個高斯整數是-2+5i是高斯素數 第92個高斯整數是-5+2i是高斯素數 第93個高斯整數是-5-2i是高斯素數 第94個高斯整數是-2-5i是高斯素數 第95個高斯整數是2-5i是高斯素數 第96個高斯整數是5-2i是高斯素數 第97個高斯整數是4+4i不是高斯素數 第98個高斯整數是-4+4i不是高斯素數 第99個高斯整數是-4-4i不是高斯素數 第100個高斯整數是4-4i不是高斯素數 第101個高斯整數是5+3i不是高斯素數 第102個高斯整數是3+5i不是高斯素數 第103個高斯整數是-3+5i不是高斯素數 第104個高斯整數是-5+3i不是高斯素數 第105個高斯整數是-5-3i不是高斯素數 第106個高斯整數是-3-5i不是高斯素數 第107個高斯整數是3-5i不是高斯素數 第108個高斯整數是5-3i不是高斯素數 第109個高斯整數是6不是高斯素數 第110個高斯整數是6i不是高斯素數 第111個高斯整數是-6不是高斯素數 第112個高斯整數是-6i不是高斯素數 第113個高斯整數是6+1i是高斯素數 第114個高斯整數是1+6i是高斯素數 第115個高斯整數是-1+6i是高斯素數 第116個高斯整數是-6+1i是高斯素數 第117個高斯整數是-6-1i是高斯素數 第118個高斯整數是-1-6i是高斯素數 第119個高斯整數是1-6i是高斯素數 第120個高斯整數是6-1i是高斯素數 第121個高斯整數是6+2i不是高斯素數 第122個高斯整數是2+6i不是高斯素數 第123個高斯整數是-2+6i不是高斯素數 第124個高斯整數是-6+2i不是高斯素數 第125個高斯整數是-6-2i不是高斯素數 第126個高斯整數是-2-6i不是高斯素數 第127個高斯整數是2-6i不是高斯素數 第128個高斯整數是6-2i不是高斯素數 第129個高斯整數是5+4i是高斯素數 第130個高斯整數是4+5i是高斯素數 第131個高斯整數是-4+5i是高斯素數 第132個高斯整數是-5+4i是高斯素數 第133個高斯整數是-5-4i是高斯素數 第134個高斯整數是-4-5i是高斯素數 第135個高斯整數是4-5i是高斯素數 第136個高斯整數是5-4i是高斯素數 第137個高斯整數是6+3i不是高斯素數 第138個高斯整數是3+6i不是高斯素數 第139個高斯整數是-3+6i不是高斯素數 第140個高斯整數是-6+3i不是高斯素數 第141個高斯整數是-6-3i不是高斯素數 第142個高斯整數是-3-6i不是高斯素數 第143個高斯整數是3-6i不是高斯素數 第144個高斯整數是6-3i不是高斯素數 第145個高斯整數是7是高斯素數 第146個高斯整數是7i是高斯素數 第147個高斯整數是-7是高斯素數 第148個高斯整數是-7i是高斯素數 第149個高斯整數是7+1i不是高斯素數 第150個高斯整數是5+5i不是高斯素數 第151個高斯整數是1+7i不是高斯素數 第152個高斯整數是-1+7i不是高斯素數 第153個高斯整數是-5+5i不是高斯素數 第154個高斯整數是-7+1i不是高斯素數 第155個高斯整數是-7-1i不是高斯素數 第156個高斯整數是-5-5i不是高斯素數 第157個高斯整數是-1-7i不是高斯素數 第158個高斯整數是1-7i不是高斯素數 第159個高斯整數是5-5i不是高斯素數 第160個高斯整數是7-1i不是高斯素數 第161個高斯整數是6+4i不是高斯素數 第162個高斯整數是4+6i不是高斯素數 第163個高斯整數是-4+6i不是高斯素數 第164個高斯整數是-6+4i不是高斯素數 第165個高斯整數是-6-4i不是高斯素數 第166個高斯整數是-4-6i不是高斯素數 第167個高斯整數是4-6i不是高斯素數 第168個高斯整數是6-4i不是高斯素數 第169個高斯整數是7+2i是高斯素數 第170個高斯整數是2+7i是高斯素數 第171個高斯整數是-2+7i是高斯素數 第172個高斯整數是-7+2i是高斯素數 第173個高斯整數是-7-2i是高斯素數 第174個高斯整數是-2-7i是高斯素數 第175個高斯整數是2-7i是高斯素數 第176個高斯整數是7-2i是高斯素數 第177個高斯整數是7+3i不是高斯素數 第178個高斯整數是3+7i不是高斯素數 第179個高斯整數是-3+7i不是高斯素數 第180個高斯整數是-7+3i不是高斯素數 第181個高斯整數是-7-3i不是高斯素數 第182個高斯整數是-3-7i不是高斯素數 第183個高斯整數是3-7i不是高斯素數 第184個高斯整數是7-3i不是高斯素數 第185個高斯整數是6+5i是高斯素數 第186個高斯整數是5+6i是高斯素數 第187個高斯整數是-5+6i是高斯素數 第188個高斯整數是-6+5i是高斯素數 第189個高斯整數是-6-5i是高斯素數 第190個高斯整數是-5-6i是高斯素數 第191個高斯整數是5-6i是高斯素數 第192個高斯整數是6-5i是高斯素數 第193個高斯整數是8不是高斯素數 第194個高斯整數是8i不是高斯素數 第195個高斯整數是-8不是高斯素數 第196個高斯整數是-8i不是高斯素數 第197個高斯整數是8+1i不是高斯素數 第198個高斯整數是7+4i不是高斯素數 第199個高斯整數是4+7i不是高斯素數 第200個高斯整數是1+8i不是高斯素數 第201個高斯整數是-1+8i不是高斯素數 第202個高斯整數是-4+7i不是高斯素數 第203個高斯整數是-7+4i不是高斯素數 第204個高斯整數是-8+1i不是高斯素數 第205個高斯整數是-8-1i不是高斯素數 第206個高斯整數是-7-4i不是高斯素數 第207個高斯整數是-4-7i不是高斯素數 第208個高斯整數是-1-8i不是高斯素數 第209個高斯整數是1-8i不是高斯素數 第210個高斯整數是4-7i不是高斯素數 第211個高斯整數是7-4i不是高斯素數 第212個高斯整數是8-1i不是高斯素數 第213個高斯整數是8+2i不是高斯素數 第214個高斯整數是2+8i不是高斯素數 第215個高斯整數是-2+8i不是高斯素數 第216個高斯整數是-8+2i不是高斯素數 第217個高斯整數是-8-2i不是高斯素數 第218個高斯整數是-2-8i不是高斯素數 第219個高斯整數是2-8i不是高斯素數 第220個高斯整數是8-2i不是高斯素數 第221個高斯整數是6+6i不是高斯素數 第222個高斯整數是-6+6i不是高斯素數 第223個高斯整數是-6-6i不是高斯素數 第224個高斯整數是6-6i不是高斯素數 第225個高斯整數是8+3i是高斯素數 第226個高斯整數是3+8i是高斯素數 第227個高斯整數是-3+8i是高斯素數 第228個高斯整數是-8+3i是高斯素數 第229個高斯整數是-8-3i是高斯素數 第230個高斯整數是-3-8i是高斯素數 第231個高斯整數是3-8i是高斯素數 第232個高斯整數是8-3i是高斯素數 第233個高斯整數是7+5i不是高斯素數 第234個高斯整數是5+7i不是高斯素數 第235個高斯整數是-5+7i不是高斯素數 第236個高斯整數是-7+5i不是高斯素數 第237個高斯整數是-7-5i不是高斯素數 第238個高斯整數是-5-7i不是高斯素數 第239個高斯整數是5-7i不是高斯素數 第240個高斯整數是7-5i不是高斯素數 第241個高斯整數是8+4i不是高斯素數 第242個高斯整數是4+8i不是高斯素數 第243個高斯整數是-4+8i不是高斯素數 第244個高斯整數是-8+4i不是高斯素數 第245個高斯整數是-8-4i不是高斯素數 第246個高斯整數是-4-8i不是高斯素數 第247個高斯整數是4-8i不是高斯素數 第248個高斯整數是8-4i不是高斯素數 第249個高斯整數是9不是高斯素數 第250個高斯整數是9i不是高斯素數 第251個高斯整數是-9不是高斯素數 第252個高斯整數是-9i不是高斯素數 第253個高斯整數是9+1i不是高斯素數 第254個高斯整數是1+9i不是高斯素數 第255個高斯整數是-1+9i不是高斯素數 第256個高斯整數是-9+1i不是高斯素數 第257個高斯整數是-9-1i不是高斯素數 第258個高斯整數是-1-9i不是高斯素數 第259個高斯整數是1-9i不是高斯素數 第260個高斯整數是9-1i不是高斯素數 第261個高斯整數是9+2i不是高斯素數 第262個高斯整數是7+6i不是高斯素數 第263個高斯整數是6+7i不是高斯素數 第264個高斯整數是2+9i不是高斯素數 第265個高斯整數是-2+9i不是高斯素數 第266個高斯整數是-6+7i不是高斯素數 第267個高斯整數是-7+6i不是高斯素數 第268個高斯整數是-9+2i不是高斯素數 第269個高斯整數是-9-2i不是高斯素數 第270個高斯整數是-7-6i不是高斯素數 第271個高斯整數是-6-7i不是高斯素數 第272個高斯整數是-2-9i不是高斯素數 第273個高斯整數是2-9i不是高斯素數 第274個高斯整數是6-7i不是高斯素數 第275個高斯整數是7-6i不是高斯素數 第276個高斯整數是9-2i不是高斯素數 第277個高斯整數是8+5i是高斯素數 第278個高斯整數是5+8i是高斯素數 第279個高斯整數是-5+8i是高斯素數 第280個高斯整數是-8+5i是高斯素數 第281個高斯整數是-8-5i是高斯素數 第282個高斯整數是-5-8i是高斯素數 第283個高斯整數是5-8i是高斯素數 第284個高斯整數是8-5i是高斯素數 第285個高斯整數是9+3i不是高斯素數 第286個高斯整數是3+9i不是高斯素數 第287個高斯整數是-3+9i不是高斯素數 第288個高斯整數是-9+3i不是高斯素數 第289個高斯整數是-9-3i不是高斯素數 第290個高斯整數是-3-9i不是高斯素數 第291個高斯整數是3-9i不是高斯素數 第292個高斯整數是9-3i不是高斯素數 第293個高斯整數是9+4i是高斯素數 第294個高斯整數是4+9i是高斯素數 第295個高斯整數是-4+9i是高斯素數 第296個高斯整數是-9+4i是高斯素數 第297個高斯整數是-9-4i是高斯素數 第298個高斯整數是-4-9i是高斯素數 第299個高斯整數是4-9i是高斯素數 第300個高斯整數是9-4i是高斯素數 第301個高斯整數是7+7i不是高斯素數 第302個高斯整數是-7+7i不是高斯素數 第303個高斯整數是-7-7i不是高斯素數 第304個高斯整數是7-7i不是高斯素數 第305個高斯整數是10不是高斯素數 第306個高斯整數是8+6i不是高斯素數 第307個高斯整數是6+8i不是高斯素數 第308個高斯整數是10i不是高斯素數 第309個高斯整數是-6+8i不是高斯素數 第310個高斯整數是-8+6i不是高斯素數 第311個高斯整數是-10不是高斯素數 第312個高斯整數是-8-6i不是高斯素數 第313個高斯整數是-6-8i不是高斯素數 第314個高斯整數是-10i不是高斯素數 第315個高斯整數是6-8i不是高斯素數 第316個高斯整數是8-6i不是高斯素數 第317個高斯整數是10+1i是高斯素數 第318個高斯整數是1+10i是高斯素數 第319個高斯整數是-1+10i是高斯素數 第320個高斯整數是-10+1i是高斯素數 第321個高斯整數是-10-1i是高斯素數 第322個高斯整數是-1-10i是高斯素數 第323個高斯整數是1-10i是高斯素數 第324個高斯整數是10-1i是高斯素數 第325個高斯整數是10+2i不是高斯素數 第326個高斯整數是2+10i不是高斯素數 第327個高斯整數是-2+10i不是高斯素數 第328個高斯整數是-10+2i不是高斯素數 第329個高斯整數是-10-2i不是高斯素數 第330個高斯整數是-2-10i不是高斯素數 第331個高斯整數是2-10i不是高斯素數 第332個高斯整數是10-2i不是高斯素數 第333個高斯整數是9+5i不是高斯素數 第334個高斯整數是5+9i不是高斯素數 第335個高斯整數是-5+9i不是高斯素數 第336個高斯整數是-9+5i不是高斯素數 第337個高斯整數是-9-5i不是高斯素數 第338個高斯整數是-5-9i不是高斯素數 第339個高斯整數是5-9i不是高斯素數 第340個高斯整數是9-5i不是高斯素數 第341個高斯整數是10+3i是高斯素數 第342個高斯整數是3+10i是高斯素數 第343個高斯整數是-3+10i是高斯素數 第344個高斯整數是-10+3i是高斯素數 第345個高斯整數是-10-3i是高斯素數 第346個高斯整數是-3-10i是高斯素數 第347個高斯整數是3-10i是高斯素數 第348個高斯整數是10-3i是高斯素數 第349個高斯整數是8+7i是高斯素數 第350個高斯整數是7+8i是高斯素數 第351個高斯整數是-7+8i是高斯素數 第352個高斯整數是-8+7i是高斯素數 第353個高斯整數是-8-7i是高斯素數 第354個高斯整數是-7-8i是高斯素數 第355個高斯整數是7-8i是高斯素數 第356個高斯整數是8-7i是高斯素數 第357個高斯整數是10+4i不是高斯素數 第358個高斯整數是4+10i不是高斯素數 第359個高斯整數是-4+10i不是高斯素數 第360個高斯整數是-10+4i不是高斯素數 第361個高斯整數是-10-4i不是高斯素數 第362個高斯整數是-4-10i不是高斯素數 第363個高斯整數是4-10i不是高斯素數 第364個高斯整數是10-4i不是高斯素數 第365個高斯整數是9+6i不是高斯素數 第366個高斯整數是6+9i不是高斯素數 第367個高斯整數是-6+9i不是高斯素數 第368個高斯整數是-9+6i不是高斯素數 第369個高斯整數是-9-6i不是高斯素數 第370個高斯整數是-6-9i不是高斯素數 第371個高斯整數是6-9i不是高斯素數 第372個高斯整數是9-6i不是高斯素數 第373個高斯整數是10+5i不是高斯素數 第374個高斯整數是5+10i不是高斯素數 第375個高斯整數是-5+10i不是高斯素數 第376個高斯整數是-10+5i不是高斯素數 第377個高斯整數是-10-5i不是高斯素數 第378個高斯整數是-5-10i不是高斯素數 第379個高斯整數是5-10i不是高斯素數 第380個高斯整數是10-5i不是高斯素數 第381個高斯整數是8+8i不是高斯素數 第382個高斯整數是-8+8i不是高斯素數 第383個高斯整數是-8-8i不是高斯素數 第384個高斯整數是8-8i不是高斯素數 第385個高斯整數是9+7i不是高斯素數 第386個高斯整數是7+9i不是高斯素數 第387個高斯整數是-7+9i不是高斯素數 第388個高斯整數是-9+7i不是高斯素數 第389個高斯整數是-9-7i不是高斯素數 第390個高斯整數是-7-9i不是高斯素數 第391個高斯整數是7-9i不是高斯素數 第392個高斯整數是9-7i不是高斯素數 第393個高斯整數是10+6i不是高斯素數 第394個高斯整數是6+10i不是高斯素數 第395個高斯整數是-6+10i不是高斯素數 第396個高斯整數是-10+6i不是高斯素數 第397個高斯整數是-10-6i不是高斯素數 第398個高斯整數是-6-10i不是高斯素數 第399個高斯整數是6-10i不是高斯素數 第400個高斯整數是10-6i不是高斯素數 第401個高斯整數是9+8i不是高斯素數 第402個高斯整數是8+9i不是高斯素數 第403個高斯整數是-8+9i不是高斯素數 第404個高斯整數是-9+8i不是高斯素數 第405個高斯整數是-9-8i不是高斯素數 第406個高斯整數是-8-9i不是高斯素數 第407個高斯整數是8-9i不是高斯素數 第408個高斯整數是9-8i不是高斯素數 第409個高斯整數是10+7i是高斯素數 第410個高斯整數是7+10i是高斯素數 第411個高斯整數是-7+10i是高斯素數 第412個高斯整數是-10+7i是高斯素數 第413個高斯整數是-10-7i是高斯素數 第414個高斯整數是-7-10i是高斯素數 第415個高斯整數是7-10i是高斯素數 第416個高斯整數是10-7i是高斯素數 第417個高斯整數是9+9i不是高斯素數 第418個高斯整數是-9+9i不是高斯素數 第419個高斯整數是-9-9i不是高斯素數 第420個高斯整數是9-9i不是高斯素數 第421個高斯整數是10+8i不是高斯素數 第422個高斯整數是8+10i不是高斯素數 第423個高斯整數是-8+10i不是高斯素數 第424個高斯整數是-10+8i不是高斯素數 第425個高斯整數是-10-8i不是高斯素數 第426個高斯整數是-8-10i不是高斯素數 第427個高斯整數是8-10i不是高斯素數 第428個高斯整數是10-8i不是高斯素數 第429個高斯整數是10+9i是高斯素數 第430個高斯整數是9+10i是高斯素數 第431個高斯整數是-9+10i是高斯素數 第432個高斯整數是-10+9i是高斯素數 第433個高斯整數是-10-9i是高斯素數 第434個高斯整數是-9-10i是高斯素數 第435個高斯整數是9-10i是高斯素數 第436個高斯整數是10-9i是高斯素數 第437個高斯整數是10+10i不是高斯素數 第438個高斯整數是-10+10i不是高斯素數 第439個高斯整數是-10-10i不是高斯素數 第440個高斯整數是10-10i不是高斯素數
//求一元三次方程的實根
#include<iostream>
#include<cmath>
#include<complex>
using namespace std;
/*
?x^3+px+q=0:
?x甲=((-q+sqrt(q^2+4p^3/27))/2)^(1/3)+((-q-sqrt(q^2+4p^3/27))/2)^(1/3)
?x乙=(-x甲+sqrt(-3x甲^2-4p))/2
?x丙=(-x甲-sqrt(-3x甲^2-4p))/2
*/
typedef float Real;
struct E3
{
public:
?E3(Real p,Real q):m_p(p),m_q(q){}
?Real DeltOfE3()
?{
??Real ret=m_q*m_q+4*m_p*m_p*m_p/27;
??return ret;
?}
?Real cube(Real a)
?{
??if(a==0)
???return 0;
??if(a>0)
???return expf(1.0*logf(a)/3.0);
??else
???return -expf(1.0*logf(-a)/3.0);
?}
?complex<Real> cube(complex<Real> a)
?{
??return exp(complex<Real>(1.0/3.0,0)*log(a));
?}
?//與牛頓切線法求得的實根值是一致的
?Real xOfE3()
?{
??Real delt=DeltOfE3();
??if(delt>=0)
??{
???Real ret1=cube((-m_q+sqrtf(delt))*0.5);
???Real ret2=cube((-m_q-sqrtf(delt))*0.5);
???return ret1+ret2;
??}
??else
??{
???complex<Real> ret1=cube((-m_q+sqrt(complex<Real>(delt,0)))*complex<Real>(0.5,0));
???complex<Real> ret2=cube((-m_q-sqrt(complex<Real>(delt,0)))*complex<Real>(0.5,0));
???return (ret1+ret2).real();
??}
?}
?//返回true表示有三個實根,返回false表示只有一個實根
?//即初中筆記中的跳板公式
?bool x2x3OfE3(Real &x2,Real &x3)
?{
??Real x1=xOfE3();
??Real delt1=-3*x1*x1-4*m_p;
??if(delt1>=0)
??{
???x2=(-x1+sqrtf(delt1))*0.5;
???x3=(-x1-sqrtf(delt1))*0.5;
???return true;
??}
??else
???return false;//即另外兩根為虛根或偽虛根
?}
public:
?? Real m_p;
?? Real m_q;
};
int main()
{
?{
??E3 E3_1011(1,1);
??Real x=E3_1011.xOfE3();//x^3+x+1=0的一實根為:x = -0.68232781
??Real x2,x3;
??bool ret=E3_1011.x2x3OfE3(x2,x3);
??int a=0;
?}
?{
??//2000.10.30星期二,x^3-0.75x+0.125=0的三實根為:sin50°=x=0.76604444、sin10°=x2=0.17364815、-sin50°-sin10°=x3=-0.93969262
??E3 E3_sin10(-0.75,0.125);
??Real x=E3_sin10.xOfE3();
??Real x2,x3;
??bool ret=E3_sin10.x2x3OfE3(x2,x3);
??int a=0;
?}
?system("pause");
?return 0;
}
#include <iostream>
using namespace std;
typedef double real;
/*
魏爾斯特拉斯方程EC1:y^2+a_1xy+a_3y=x^3+a_2x^2+a_4x+a_6
表示一個橢圓曲線時有一個不為0的不變量△
*/
struct EC1
{
public:
?EC1(real a1,real a3,real a2,real a4,real a6):m_a1(a1),m_a3(a3),m_a2(a2),m_a4(a4),m_a6(a6){}
?real b2OfEC()
?{
??return m_a1*m_a1+4*m_a2;
?}
?real b4OfEC()
?{
??return m_a1*m_a3+2*m_a4;
?}
?real b6OfEC()
?{
??return m_a3*m_a3+4*m_a6;
?}
?real b8OfEC()
?{
??return (b2OfEC()*b6OfEC()-b4OfEC())/4;
?}
?real c4OfEC()
?{
??return b2OfEC()*b2OfEC()-24*b4OfEC();
?}
?real c6OfEC()
?{
??return -b2OfEC()*b2OfEC()*b2OfEC()+36*b2OfEC()*b4OfEC()-216*b6OfEC();
?}
?real DeltOfEC()
?{
??//錯誤的:
??//return (c4OfEC()*c4OfEC()*c4OfEC()-c6OfEC()*c6OfEC())/35831808;
??//real c4=c4OfEC();
??//real c6=c6OfEC();
??//return (c4*c4*c4-c6*c6)/35831808;
??//正確的:
??real b2=b2OfEC();
??real b4=b4OfEC();
??real b6=b6OfEC();
??real b8=b8OfEC();
??return -b2*b2*b8-8*b4*b4*b4-27*b6*b6+9*b2*b4*b6;
?}
?real jOfEC()
?{
??return c4OfEC()*c4OfEC()*c4OfEC()/DeltOfEC();
?}
public:
?real m_a1;
?real m_a3;
?real m_a2;
?real m_a4;
?real m_a6;
};
/*
復分析中的魏爾斯特拉斯標準型EC2:y^2=4x^3-g_2x+g_3
可以用P(花體)函數參數化:x=P(z),y=P'(z)
*/
struct EC2
{
public:
?EC2(real g2,real g3):m_g2(g2),m_g3(g3){}
?real DeltOfEC()
?{
??return m_g2*m_g2*m_g2-27*m_g3*m_g3;
?}
?real jOfEC()
?{
??return 1728*m_g2*m_g2*m_g2/DeltOfEC();
?}
public:
?real m_g2;
?real m_g3;
};
/*
數論和算術中常用的形式EC3:y^2=x^3+ax+b
*/
struct EC3
{
public:
?EC3(real a,real b):m_a(a),m_b(b){}
?real b2OfEC()
?{
??return 0;
?}
?real b4OfEC()
?{
??return 2*m_a;
?}
?real b6OfEC()
?{
??return 4*m_b;
?}
?real b8OfEC()
?{
??return (b2OfEC()*b6OfEC()-b4OfEC())/4;
?}
?real c4OfEC()
?{
??return b2OfEC()*b2OfEC()-24*b4OfEC();
?}
?real c6OfEC()
?{
??return -b2OfEC()*b2OfEC()*b2OfEC()+36*b2OfEC()*b4OfEC()-216*b6OfEC();
?}
?real DeltOfEC()
?{
??return -16*(4*m_a*m_a*m_a+27*m_b*m_b);//不要把27寫成26
?}
?real jOfEC()
?{
??//return c4OfEC()*c4OfEC()*c4OfEC()/DeltOfEC();//正確的
??return -1728*64*m_a*m_a*m_a/DeltOfEC();//加一個負號
?}
public:
?real m_a;
?real m_b;
};
int main()
{
?{
??//j0.DeltOfEC()=-432
??//j0.jOfEC()=0
??//j1728.DeltOfEC()=64
??//j1728.jOfEC()=1728
??EC3 j0(0,-1);
??cout<<"j0.DeltOfEC()="<<j0.DeltOfEC()<<endl;
??cout<<"j0.jOfEC()="<<j0.jOfEC()<<endl;
??EC3 j1728(-1,0);//y^2=x^3-x
??cout<<"j1728.DeltOfEC()="<<j1728.DeltOfEC()<<endl;
??cout<<"j1728.jOfEC()="<<j1728.jOfEC()<<endl;
?}
?{
??//j0.DeltOfEC()=-432
??//j0.jOfEC()=-0
??//j1728.DeltOfEC()=64
??//j1728.jOfEC()=1728
??EC1 j0(0,0,0,0,-1);
??cout<<"j0.DeltOfEC()="<<j0.DeltOfEC()<<endl;
??cout<<"j0.jOfEC()="<<j0.jOfEC()<<endl;
??EC1 j1728(0,0,0,-1,0);//y^2=x^3-x
??cout<<"j1728.DeltOfEC()="<<j1728.DeltOfEC()<<endl;
??cout<<"j1728.jOfEC()="<<j1728.jOfEC()<<endl;
??//jc.DeltOfEC()=-433
??//jc.jOfEC()=-0.00230947
??//jc2.DeltOfEC()=-3.08659e-009
??//jc2.jOfEC()=-0.00230947
??//j(c=1.3365e-006)=-0.00230947
??EC1 jc(-1,0,0,0,1);//y^2-xy=x^3+1
??cout<<"jc.DeltOfEC()="<<jc.DeltOfEC()<<endl;
??cout<<"jc.jOfEC()="<<jc.jOfEC()<<endl;
??real j=-0.00230947;//y^2=x^3-3cx+2c,j=1728*c/(c-1)
??real c=j/(j-1728);
??EC1 jc2(0,0,0,-3*c,2*c);
??cout<<"jc2.DeltOfEC()="<<jc2.DeltOfEC()<<endl;
??cout<<"jc2.jOfEC()="<<jc2.jOfEC()<<endl;
??cout<<"j(c="<<c<<")="<<1728*c/(c-1)<<endl;
?}
?system("pause");
}
10.2橢圓曲線的算術
橢圓曲線上有理點全體構成一個Abel群。也就是說群的元素現在不是數而是點。因此我們必須規定,兩個點的和(我們用(+)表示)應該是哪一點?每個點的逆元素是什么?然后再驗證它們是否滿足Abel群的幾條公理。
1.首先我們規定每一點P的反點~P。由于任何橢圓曲線關于x軸對稱[按:不一定。],即如果P(x,y)是橢圓曲線上一點,則(x,-y)也是橢圓曲線上一點,我們稱它為P(x,y)的反點,記作~P(x,-y)。
2.現在我們定義兩點P_1(x_1,y_1)和P_2(x_2,y_2)的加法運算(+)。如果連接P_1與P_2的直線與橢圓曲線相交于一點P_3,則定義其和為P_3的反點:P_1(+)P_2=~P_3。
3.每一點的逆元素為其反點。
4.零元素為無窮原點。
利用△(E)可以定義橢圓曲線最重要的不變量——j不變量:
j(E)=(c_4)^3/△(E),
或j(E)=12^3(4a)^3/△(E),
或j(E)=12^3(g_2)^3/△(E)。
j不變量的重要性在于兩Q上橢圓曲線~Q同構當且僅當j不變量相等。
而且,對于每有理數值j,都存在以j為其j不變量的橢圓曲線。
對于Q上的橢圓曲線,還有一個極小魏爾斯特拉斯方程y^2+a_1xy+a_3y=x^3+a_2x^2+a_4x+a_6,其中a_1,a_2,a_3,a_4,a_5均為整數,而且對所有素數p,都是極小的。
極小魏爾斯特拉斯方程的判別式稱為極小判別式D(E)。
由于j(E)刻畫C上橢圓曲線E的同構類,因此十分重要。每一類我們可以找到形式簡單的橢圓曲線為其代表,例如:
1.j=0,可取y^2=x^3-1。
【
橢圓曲線a_4=0,a_6=-1,則x^3-1有一個判別式△=-16(4a_4^3+27a_6^2)=-432,j=0^3/△=0
a_1=0,a_3=0,a_2=0,
b_2=a_1^2+4a_2=0
b_4=a_1a_3+2a_4=0
c_4=b_2^2-24b_4=0
我們可以依據△對橢圓曲線進行分類:
1.△<0,x^3-1只有一個實根,橢圓曲線是一個連通的曲線。
2.△<0,有三個不同的實根。
3.△=0,不是橢圓曲線,或者說它們是有奇點的退化的橢圓曲線。
】
2.j=1728,可取y^2=x^3-x。
3.j≠0,1728時,令c=j/(j-1728),則可取y^2=x^3-3cx+2c。
j常稱為橢圓曲線的模不變量,因為它在模變換下不變,即對于{{a,b},{c,d}}∈SL_2(2),有j((atau+b)/(ctau+d))=j(tau)。
20130626問題:
系數屬于F_3={0,1,2}的二次方程x^2+x+2=0,不可分解,無解。
vector<int> retVec12=FindrootInF3(Polygon2,1,2);//空,即x^2+x+2=0在F_3中無根
設a是是F_3[x]中不可約多項式f(x)=x^2+x+2的一個根,求擴域F_3(a)及x^2+x+2的另外一個根b=(0,1,2,a)?
記-1=2在F_3上的[模]平方根為i,即i是x^2=2∈F_3[x]的一個根,求i和a之間的關系?
解法1:
F_3[a]={m+na|m,n∈F_3}=F_3[i]{m+ni|m,n∈F_3}是f(x)在F_3上的分裂域。
這是因為f(x)=[x-(1+i)][x-(1-i)],----在C中進行因式分解,這里i是虛數單位
同時,E=F_3[x]/<x^2+x+2>的元素x+<x^2+x+2>是f(x)的根。----這里既用x表示F_3上的未定元,又用x表示E中的陪集代表元,可將陪集x+<x^2+x+2>記作a,于是,E={0,1,2,a,a+1,a+2,2a,2a+1,2a+2}
因為f(x)是2次的,所以f(x)的另一個也在E內。于是f(x)在E中分裂。又因為E只有9個元素,顯然E也是f(x)在F_3上的分裂域。E中元素間的加和乘與多項式的運算是一樣的。
由于x^2+x+2+<x^2+x+2>=0,因此a^2+a+2=0,
所以a^2=-a-2=2a+1。----這里-1=2,-2=1
由于a(2a+2)=2a^2+2a=2(2a+1)+2a=a+2+2a=2,
所以
x^2+x+2=(x-a)[x-(2a+2)]=(x-a)(x+a+1)
于是,我們已經找到了x^2+x+2在F_3上的兩個分裂域,一個是F_3(i),而另一個則是F_3[x]/<x^2+x+2>。
定理:設F是域,p(x)在F上不可約。如果a是p(x)在F的某個擴域E中的根,那么F(a)同構于F[x]/<p(x)>。而且,如果degp(x)=n,那么F(a)中的元都能惟一地表為如下的形式c_(n-1)a^(n-1)+c_(n-2)a^(n-2)+…+c_1a+c_0,其中c_0,c_1,…,c_(n-1)∈F。
20130622問題:證明在有限域中存在不可分多項式?
20130621問題:設a是F_2[x]中不可約多項式x^3+x+1的一個根,求擴域F_2(a)及x^3+x+1的另外兩個根b=b(0,1,a),c=c(0,1,a)?
解答:
F_2(a)={0=O,1=I,a=D,a^2=A,1+a=E,1+a^2=C,a+a^2=B,1+a+a^2=F},另外兩個根為:b=a^2,c=a+a^2。
----加法運算表----
O+O=O O+I=I O+A=A O+B=B O+C=C O+D=D O+E=E O+F=F
I+O=I I+I=O I+A=C I+B=F I+C=A I+D=E I+E=D I+F=B
A+O=A A+I=C A+A=O A+B=D A+C=I A+D=B A+E=F A+F=E
B+O=B B+I=F B+A=D B+B=O B+C=E B+D=A B+E=C B+F=I
C+O=C C+I=A C+A=I C+B=E C+C=O C+D=F C+E=B C+F=D
D+O=D D+I=E D+A=B D+B=A D+C=F D+D=O D+E=I D+F=C
E+O=E E+I=D E+A=F E+B=C E+C=B E+D=I E+E=O E+F=A
F+O=F F+I=B F+A=E F+B=I F+C=D F+D=C F+E=A F+F=O
----乘法運算表----
O*O=O O*I=O O*A=O O*B=O O*C=O O*D=O O*E=O O*F=O
I*O=O I*I=I I*A=A I*B=B I*C=C I*D=D I*E=E I*F=F
A*O=O A*I=A A*A=B A*B=C A*C=D A*D=E A*E=F A*F=I
B*O=O B*I=B B*A=C B*B=D B*C=E B*D=F B*E=I B*F=A
C*O=O C*I=C C*A=D C*B=E C*C=F C*D=I C*E=A C*F=B
D*O=O D*I=D D*A=E D*B=F D*C=I D*D=A D*E=B D*F=C
E*O=O E*I=E E*A=F E*B=I E*C=A E*D=B E*E=C E*F=D
F*O=O F*I=F F*A=I F*B=A F*C=B F*D=C F*E=D F*F=E
----減法運算表----
O-O=O O-I=I O-A=A O-B=B O-C=C O-D=D O-E=E O-F=F
I-O=I I-I=O I-A=C I-B=F I-C=A I-D=E I-E=D I-F=B
A-O=A A-I=C A-A=O A-B=D A-C=I A-D=B A-E=F A-F=E
B-O=B B-I=F B-A=D B-B=O B-C=E B-D=A B-E=C B-F=I
C-O=C C-I=A C-A=I C-B=E C-C=O C-D=F C-E=B C-F=D
D-O=D D-I=E D-A=B D-B=A D-C=F D-D=O D-E=I D-F=C
E-O=E E-I=D E-A=F E-B=C E-C=B E-D=I E-E=O E-F=A
F-O=F F-I=B F-A=E F-B=I F-C=D F-D=C F-E=A F-F=O
關鍵推導過程:
O*O*O+O+I=I
I*I*I+I+I=I
A*A*A+A+I=O
B*B*B+B+I=O
C*C*C+C+I=D
D*D*D+D+I=O
E*E*E+E+I=B
F*F*F+F+I=A
所以三個根a,b,c為A,B,D
令0=O,1=I,
錯誤的:a=A,a^2=B,1+a=C=a^3,
錯誤的:a=B,a^2=D,1+a=F=a^3,
正確的:a=D,a^2=A,1+a=E=aA,1-a=E=>a=-a,1+a^2=C,a+a^2=B,1+a+a^2=F=I+F
錯誤的:a=C,a^2=F,1+a=A=aE,1-a=A,=>a=-a,1+a^2=B,a+a^2=D,1+a+a^2=E=A+F
即:八元域F_2(a)={O=0,I=1,D=a,A=a^2,E=1+a,C=1+a^2,B=a+a^2,F=1+a+a^2},
而不是{O=0,I=1,C=a,F=a^2,A=1+a,B=1+a^2,D=a+a^2,E=1+a+a^2}。
F_2的擴域記為F_2(a)=F_2(a=D,b=A=a^2,c=B=a+a^2)
另外兩個根為:b=a^2,c=a+a^2。
三根滿足關系:
x^3+x+1=x^3-(a+b+c)x^2+(ab-ac-bc)x-abc
D+A+B=O<=>a+b+c=0
DAB=I=-I<=>abc=1=-1
DA-DB-AB=I<=>ab-ac-bc=1
D^3+D=I<=>a^3+a=1
DA(-D-A)=I<=>ab(-a-b)=1
#include <iostream>
#include <vector>
#include <cassert>
using namespace std;
/*
練習作業
1.方程x^2+1=0在有理數域中沒有根,問在有限域F_5中有沒有根,有幾個根?
2.記F=F_2是含2個元素的域,證明多項式x^2+1在多項式環F[x]中可約,而x^2+x+1在多項式環F[x]中不可約。
3.假定F=F_2,α是F[x]中不可約多項式x^2+x+1的一個根,證明F(α)={0,1,α,1+α}是一個含4個元素的域。求多項式x^2+x+1的另一個根。
4.假定F=F_2,求F[x]中所有3次不可約多項式。
在有限域F_2中,5次不可約多項式x^5+x^2+1的[模乘法]階是31=2^5-1。
F_2中1-5次不可約多項式列表:
1,1+x,x
2,1+x+x^2
3,1+x+x^3,1+x^2+x^3
4,1+x+x^4,1+x+x^2+x^3+x^4,1+x^3+x^4
5,1+x^2+x^5,1+x+x^2+x^3+x^5,1+x^3+x^5,1+x+x^3+x^4+x^5,1+x^2+x^3+x^4+x^5,1+x+x^2+x^4+x^5
*/
【
在F_2中,
x^3+1=(x-1)^3,
x^3+x+1=(x-a)(x-b)(x-c)
x^3+x^2+1=(x-a)(x-b)(x-c)
x^2+1=(x-1)^2,
[
x^2+x+1=(x-a)(x-b)=x^2-(a+b)x+ab,
F_2的擴域記為F_2(a)=F_2(a,b),a(a+1)=a^2+a=a+b=1=-1,ab=1。
b=a^2=(a+1),a^3=1
所以F_2(a)={0,1,a,1+a}
]
】
template <class T> T print(T n); //和定義類時差不多,返回值為T類型,參數n也為T類型
template <class T> T print(T n)
{
?cout<<n<<endl;
?return n;
}
int F_5[5]={0,1,2,3,4};
int Mod(int ret,unsigned int n)
{
?assert(n>0);
?if(ret<0)
?{
??int ret1=ret+(-ret+1)*n;
??return ret1%n;
?}
?return ret%n;
}
int Mod5(int ret)
{
?//while(ret<0)
?//{
?//?ret+=5;
?//?if(ret>=0)
?//??return ret;
?//}
?//?? return ret%5;
?return Mod(ret,5);
}
int AddInF5(int a,int b)
{
?int ret=Mod5(a+b);
?return ret;
}
int MulInF5(int a,int b)
{
?int ret=Mod5(a*b);
?return ret;
}
int AddInvInF5(int a)
{
?static int F_5[5]={0,1,2,3,4};
?for(int i=0;i<5;i++)
?{
??if(AddInF5(F_5[i],Mod5(a))==0)
???return F_5[i];
?}
?return -1;//錯誤值
}
int MulInvInF5(int a)
{
?static int F_5[5]={0,1,2,3,4};
?for(int i=0;i<5;i++)
?{
??if(MulInF5(F_5[i],Mod5(a))==1)
???return F_5[i];
?}
?return -1;//錯誤值
}
typedef void(*pFuncVoid)(void);
typedef int(*pFuncInt0)(int x);
int Polygon(int x)
{
?return x*x+1;
}
vector<int> FindrootInF5(pFuncInt0 fun)
{
?vector<int> ret;
?if(fun!=NULL)
?{
??static int F_5[5]={0,1,2,3,4};
??for(int i=0;i<5;i++)
??{
???if(Mod5(fun(F_5[i]))==0)
????ret.push_back(F_5[i]);
??}
?}
?return ret;
}
int main()
{
?vector<int> retVec=FindrootInF5(Polygon);//2,3,即x^2+1=0在F_5中有兩根:x_1=2,x_2=3
?//int ret1=(-2)%5;
?//int ret2=(-10)%5;
?//int ret3=Mod5(-2);
?//int ret4=Mod5(-7);
?//int ret5=Mod(-2,5);
?//int ret6=Mod(-7,5);
?system("pause");
?return 0;
}
#include <iostream>
#include <vector>
#include <cassert>
using namespace std;
/*
系數屬于F_3={0,1,2}的所有有實際意義的二次方程。
?方程,因式分解,解
?x^2+1=0,不可分解,無解
?x^2+2=0,(x+1)(x+2),x=1,x=2
?x^2+x+1=0,(x+2)(x+2),x=1
?x^2+x+2=0,不可分解,無解
?x^2+2x+1=0,(x+1)(x+1),x=2
?x^2+2x+2=0,不可分解,無解
?在我研究的這個域內沒有解的方程稱為不可約的。你可以看到系數在0,1,2域中的六個有意義的方程中有三個是不可約的。
*/
/*
系數屬于F_2={0,1}的所有有實際意義的三次、二次方程。
?方程,因式分解,解
?x^3+1=0,在F_2中有一根:x_1=1
?x^3+x+1=0,在F_2中無根
?x^3+x^2+1=0,在F_2中無根
?x^3+x^2+x+1=0,在F_2中有一根:x_1=1
?x^2+1=0,在F_2中有一根:x_1=1
?x^2+x+1=0,在F_2中無根
?在我研究的這個域內沒有解的方程稱為不可約的。你可以看到系數在0,1域中的六個有意義的方程中有三個是不可約的。
*/
int Mod(int ret,unsigned int n)
{
?assert(n>0);
?if(ret<0)
?{
??int ret1=ret+(-ret+1)*n;
??return ret1%n;
?}
?return ret%n;
}
int Mod3(int ret)
{
?return Mod(ret,3);
}
//int AddInF3(int a,int b)
//{
//?int ret=Mod3(a+b);
//?return ret;
//}
//int MulInF3(int a,int b)
//{
//?int ret=Mod3(a*b);
//?return ret;
//}
//int AddInvInF3(int a)
//{
//?for(int i=0;i<3;i++)
//?{
//??if(AddInF3(i,Mod3(a))==0)
//???return i;
//?}
//?return -1;//錯誤值
//}
//int MulInvInF3(int a)
//{
//?for(int i=0;i<5;i++)
//?{
//??if(MulInF3(i,Mod3(a))==1)
//???return i;
//?}
//?return -1;//錯誤值
//}
typedef void(*pFuncVoid)(void);
typedef int(*pFuncInt0)(int x);
typedef int(*pFuncInt2)(int x,int a1,int a0);
typedef int(*pFuncInt3)(int x,int a2,int a1,int a0);
int Polygon2(int x,int a1,int a0)
{
?return x*x+a1*x+a0;
}
int Polygon3(int x,int a2,int a1,int a0)
{
?return x*x*x+a2*x*x+a1*x+a0;
}
vector<int> FindrootInF3(pFuncInt2 fun,int a1,int a0)
{
?vector<int> ret;
?if(fun!=NULL)
?{
??for(int i=0;i<3;i++)
??{
???if(Mod3(fun(i,a1,a0))==0)
????ret.push_back(i);
??}
?}
?return ret;
}
//通用的代碼
vector<int> FindrootInFp(pFuncInt2 fun,int p,int a1,int a0)
{
?vector<int> ret;
?if(fun!=NULL)
?{
??for(int i=0;i<p;i++)
??{
???if(Mod(fun(i,a1,a0),p)==0)
????ret.push_back(i);
??}
?}
?return ret;
}
vector<int> FindrootInFp(pFuncInt3 fun,int p,int a2,int a1,int a0)
{
?vector<int> ret;
?if(fun!=NULL)
?{
??for(int i=0;i<p;i++)
??{
???if(Mod(fun(i,a2,a1,a0),p)==0)
????ret.push_back(i);
??}
?}
?return ret;
}
int main()
{
?vector<int> retVec01=FindrootInF3(Polygon2,0,1);//空,即x^2+1=0在F_3中無根
?vector<int> retVec02=FindrootInF3(Polygon2,0,2);//1,2,即x^2+2=0在F_3中有兩根:x_1=1,x_2=2
?vector<int> retVec11=FindrootInF3(Polygon2,1,1);//1,即x^2+x=1=0在F_3中有一根:x_1=1
?vector<int> retVec12=FindrootInF3(Polygon2,1,2);//空,即x^2+x+2=0在F_3中無根
?vector<int> retVec21=FindrootInF3(Polygon2,2,1);//2,即x^2+2x=1=0在F_3中有一根:x_1=2
?vector<int> retVec22=FindrootInF3(Polygon2,2,2);//空,即x^2+2x+2=0在F_3中無根
?//x^3+1=0,
?//x^3+x+1=0,
?//x^3+x^2+1=0,
?//x^3+x^2+x+1=0,
?//x^2+1=0,
?//x^2+x+1=0,
?vector<int> retVec001=FindrootInFp(Polygon3,2,0,0,1);//1,即x^3+1=0在F_2中有一根:x_1=1
?vector<int> retVec011=FindrootInFp(Polygon3,2,0,1,1);//空,即x^3+x+1=0在F_2中無根
?vector<int> retVec101=FindrootInFp(Polygon3,2,1,0,1);//空,即x^3+1=0在F_2中無根
?vector<int> retVec111=FindrootInFp(Polygon3,2,1,1,1);//1,即x^3+x^2+x+1=0在F_2中有一根:x_1=1
?vector<int> retVec00_01=FindrootInFp(Polygon2,2,0,1);//1,即x^2+1=0在F_2中有一根:x_1=1
?vector<int> retVec00_11=FindrootInFp(Polygon2,2,1,1);//空,即x^2+x+1=0在F_2中無根
?system("pause");
?return 0;
}
總結
以上是生活随笔為你收集整理的可计算代数数论(2012-12-09 20:56、2013-03-23 21:39、2013-06-23 20:27、2013-06-23 20:32、2014-05-16 17:49)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Openssl建立CA系统
- 下一篇: java反射--Class类