Path: blob/master/sage/tests/french_book/numbertheory.py
4107 views
"""1Test file for Chapter Number Theory.2"""34r"""5sage: a=IntegerModRing(15)(3); b=IntegerModRing(17)(3); print a, b63 37sage: a == b8False9sage: R=a.base_ring(); R10Ring of integers modulo 1511sage: R.characteristic()121513sage: print a+a, a-17, a*a+1, a^3146 1 10 1215sage: 1/(a+1)16417sage: 1/a18Traceback (most recent call last):19...20ZeroDivisionError: Inverse does not exist.21sage: z=lift(a); y=ZZ(a); print y, type(y), y==z223 <type 'sage.rings.integer.Integer'> True23sage: [Mod(x,15).additive_order() for x in range(0,15)]24[1, 15, 15, 5, 15, 3, 5, 15, 15, 5, 3, 15, 5, 15, 15]25sage: [[x,Mod(x,15).multiplicative_order()] for x in range(1,15) if gcd(x,15)==1]26[[1, 1], [2, 4], [4, 2], [7, 4], [8, 4], [11, 2], [13, 4], [14, 2]]27sage: p=10^20+39; mod(2,p).multiplicative_order()285000000000000000001929sage: mod(3,p).multiplicative_order()3010000000000000000003831sage: n=3^100000; a=n-1; e=10032sage: timeit('(a^e) % n') # random long time335 loops, best of 3: 387 ms per loop34sage: timeit('power_mod(a,e,n)') # random35125 loops, best of 3: 3.46 ms per loop36sage: R = GF(17); [1/R(x) for x in range(1,17)]37[1, 9, 6, 13, 7, 3, 5, 15, 2, 12, 14, 10, 4, 11, 8, 16]38sage: R = GF(9,name='x'); R39Finite Field in x of size 3^240sage: R.polynomial()41x^2 + 2*x + 242sage: [r for r in R]43[0, 2*x, x + 1, x + 2, 2, x, 2*x + 2, 2*x + 1, 1]44sage: Q.<x> = PolynomialRing(GF(3))45sage: R2 = GF(9,name='x',modulus=x^2+1); R246Finite Field in x of size 3^247sage: p = R(x+1); R2(p)48Traceback (most recent call last):49...50TypeError: unable to coerce from a finite field other than the prime subfield51sage: rational_reconstruction(411,1000)52-13/1753sage: rational_reconstruction(409,1000)54Traceback (most recent call last):55...56ValueError: Rational reconstruction of 409 (mod 1000) does not exist.57sage: def harmonic(n):58... return sum([1/x for x in range(1,n+1)])59sage: def harmonic_mod(n,m):60... return add([1/x % m for x in range(1,n+1)])61sage: def harmonic2(n):62... q = lcm(range(1,n+1))63... pmax = RR(q*(log(n)+1))64... m = ZZ(2*pmax^2)65... m = ceil(m/q)*q + 166... a = harmonic_mod(n,m)67... return rational_reconstruction(a,m)68sage: harmonic(100) == harmonic2(100)69True70sage: a=2; b=3; m=5; n=7; lambda0=(b-a)/m % n; a+lambda0*m711772sage: crt(2,3,5,7)731774sage: def harmonic3(n):75... q = lcm(range(1,n+1))76... pmax = RR(q*(log(n)+1))77... B = ZZ(2*pmax^2)78... m = 1; a = 0; p = 2^6379... while m<B:80... p = next_prime(p)81... b = harmonic_mod(n,p)82... a = crt(a,b,m,p)83... m = m*p84... return rational_reconstruction(a,m)85sage: harmonic(100) == harmonic3(100)86True87sage: crt(15,1,30,4)884589sage: crt(15,2,30,4)90Traceback (most recent call last):91...92ValueError: No solution to crt problem since gcd(30,4) does not divide 15-293sage: p=previous_prime(2^400)94sage: timeit('is_pseudoprime(p)') # random95625 loops, best of 3: 1.07 ms per loop96sage: timeit('is_prime(p)') # random long time975 loops, best of 3: 485 ms per loop98sage: [560 % (x-1) for x in [3,11,17]]99[0, 0, 0]100sage: def count_primes1(n):101... return add([1 for p in range(n+1) if is_prime(p)])102sage: def count_primes2(n):103... return add([1 for p in range(n+1) if is_pseudoprime(p)])104sage: def count_primes3(n):105... s=0; p=2106... while p <= n: s+=1; p=next_prime(p)107... return s108sage: def count_primes4(n):109... s=0; p=2110... while p <= n: s+=1; p=next_probable_prime(p)111... return s112sage: def count_primes5(n):113... s=0114... for p in prime_range(n): s+=1115... return s116sage: timeit('count_primes1(10^5)') # random, not tested1175 loops, best of 3: 674 ms per loop118sage: timeit('count_primes2(10^5)') # random, not tested1195 loops, best of 3: 256 ms per loop120sage: timeit('count_primes3(10^5)') # random1215 loops, best of 3: 49.2 ms per loop122sage: timeit('count_primes4(10^5)') # random1235 loops, best of 3: 48.6 ms per loop124sage: timeit('count_primes5(10^5)') # random125125 loops, best of 3: 2.67 ms per loop126sage: p=(2^42737+1)//3; a=3^42737127sage: timeit('a.gcd(p)') # random128125 loops, best of 3: 4.3 ms per loop129sage: timeit('a.jacobi(p)') # random13025 loops, best of 3: 26.1 ms per loop131sage: p=10^10+19; a=mod(17,p); a.log(2)1326954104378133sage: mod(2,p)^695410437813417135sage: p=10^20+39; a=mod(17,p)136sage: time r=a.log(3) # not tested137CPU times: user 89.63 s, sys: 1.70 s, total: 91.33 s138"""139140141