本文整理汇总了Python中sympy.core.power.integer_nthroot函数的典型用法代码示例。如果您正苦于以下问题:Python integer_nthroot函数的具体用法?Python integer_nthroot怎么用?Python integer_nthroot使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了integer_nthroot函数的9个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: test_isqrt
def test_isqrt():
from math import sqrt as _sqrt
limit = 17984395633462800708566937239551
assert int(_sqrt(limit)) == integer_nthroot(limit, 2)[0]
assert int(_sqrt(limit + 1)) != integer_nthroot(limit + 1, 2)[0]
assert isqrt(limit + 1) == integer_nthroot(limit + 1, 2)[0]
assert isqrt(limit + 1 + S.Half) == integer_nthroot(limit + 1, 2)[0]
示例2: test_powers
def test_powers():
assert integer_nthroot(1, 2) == (1, True)
assert integer_nthroot(1, 5) == (1, True)
assert integer_nthroot(2, 1) == (2, True)
assert integer_nthroot(2, 2) == (1, False)
assert integer_nthroot(2, 5) == (1, False)
assert integer_nthroot(4, 2) == (2, True)
assert integer_nthroot(123**25, 25) == (123, True)
assert integer_nthroot(123**25+1, 25) == (123, False)
assert integer_nthroot(123**25-1, 25) == (122, False)
assert 64**(Rational(1)/3)==4
assert 64**(Rational(2)/3)==16
assert 24*64**(-Rational(1)/2)==3
assert Rational(5**3, 8**3)**Rational(4,3) == Rational(5**4, 8**4)
assert Rational(-4,7)**Rational(1,2) == I*Rational(4,7)**Rational(1,2)
assert str(Rational(1,4) ** Rational(1,2)) == "1/2"
assert str(Rational(1,36) ** Rational(1,2)) == "1/6"
assert str((123**25) ** Rational(1,25)) == "123"
assert str((123**25+1)**Rational(1,25)) != "123"
assert str((123**25-1)**Rational(1,25)) != "123"
assert str((123**25-1)**Rational(1,25)) != "122"
assert str(Rational(3,5)**(-Rational(1,2))) == "5**(1/2)*(1/3)**(1/2)"
assert str(Rational(81,36)**(Rational(3,2))) == "27/8"
assert str(Rational(81,36)**(-Rational(3,2))) == "8/27"
assert str((-4)**Rational(1,2)) == str(2*I)
示例3: perfect_power
def perfect_power(n, candidates=None, recursive=True):
"""
Return ``(a, b)`` such that ``n`` == ``a**b`` if ``n`` is a
perfect power; otherwise return ``None``.
By default, attempts to determine the largest possible ``b``.
With ``recursive=False``, the smallest possible ``b`` will
be chosen (this will be a prime number).
"""
if n < 3:
return None
logn = math.log(n,2)
max_possible = int(logn)+2
if not candidates:
candidates = primerange(2, max_possible)
for b in candidates:
if b > max_possible:
break
# Weed out downright impossible candidates
if logn/b < 40:
a = 2.0**(logn/b)
if abs(int(a+0.5)-a) > 0.01:
continue
# print b
r, exact = integer_nthroot(n, b)
if exact:
if recursive:
m = perfect_power(r)
if m:
return m[0], b*m[1]
return r, b
示例4: test_powers
def test_powers():
assert integer_nthroot(1, 2) == (1, True)
assert integer_nthroot(1, 5) == (1, True)
assert integer_nthroot(2, 1) == (2, True)
assert integer_nthroot(2, 2) == (1, False)
assert integer_nthroot(2, 5) == (1, False)
assert integer_nthroot(4, 2) == (2, True)
assert integer_nthroot(123**25, 25) == (123, True)
assert integer_nthroot(123**25+1, 25) == (123, False)
assert integer_nthroot(123**25-1, 25) == (122, False)
assert integer_nthroot(1,1) == (1, True)
assert integer_nthroot(0,1) == (0, True)
assert integer_nthroot(0,3) == (0, True)
assert integer_nthroot(10000, 1) == (10000, True)
assert integer_nthroot(4,2) == (2, True)
assert integer_nthroot(16,2) == (4, True)
assert integer_nthroot(26,2) == (5, False)
assert integer_nthroot(1234567**7, 7) == (1234567, True)
assert integer_nthroot(1234567**7+1, 7) == (1234567, False)
assert integer_nthroot(1234567**7-1, 7) == (1234566, False)
b = 25**1000
assert integer_nthroot(b, 1000) == (25, True)
assert integer_nthroot(b+1, 1000) == (25, False)
assert integer_nthroot(b-1, 1000) == (24, False)
c = 10**400
c2 = c**2
assert integer_nthroot(c2, 2) == (c, True)
assert integer_nthroot(c2+1, 2) == (c, False)
assert integer_nthroot(c2-1, 2) == (c-1, False)
assert integer_nthroot(2,10**10) == (1, False)
p, r = integer_nthroot(int(factorial(10000)), 100)
assert p % (10**10) == 5322420655
assert not r
# Test that this is fast
assert integer_nthroot(2,10**10) == (1, False)
示例5: test_integer_nthroot_overflow
def test_integer_nthroot_overflow():
assert integer_nthroot(10**(50*50), 50) == (10**50, True)
assert integer_nthroot(10**100000, 10000) == (10**10, True)
示例6: factorint
#.........这里部分代码省略.........
if factors and verbose:
for k in sorted(factors):
print factor_msg % (k, factors[k])
if next_p == 0:
if n > 1:
factors[int(n)] = 1
if verbose:
print complete_msg
return factors
# continue with more advanced factorization methods
# first check if the simplistic run didn't finish
# because of the limit and check for a perfect
# power before exiting
try:
if limit and next_p > limit:
if verbose:
print 'Exceeded limit:', limit
_check_termination(factors, n, limit, use_trial, use_rho, use_pm1,
verbose)
if n > 1:
factors[int(n)] = 1
return factors
else:
# Before quitting (or continuing on)...
# ...do a Fermat test since it's so easy and we need the
# square root anyway. Finding 2 factors is easy if they are
# "close enough." This is the big root equivalent of dividing by
# 2, 3, 5.
sqrt_n = integer_nthroot(n, 2)[0]
a = sqrt_n + 1
a2 = a**2
b2 = a2 - n
for i in range(3):
b, fermat = integer_nthroot(b2, 2)
if fermat:
break
b2 += 2*a + 1 # equiv to (a+1)**2 - n
a += 1
if fermat:
if verbose:
print fermat_msg
if limit:
limit -= 1
for r in [a - b, a + b]:
facs = factorint(r, limit=limit, use_trial=use_trial,
use_rho=use_rho, use_pm1=use_pm1,
verbose=verbose)
factors.update(facs)
raise StopIteration
# ...see if factorization can be terminated
_check_termination(factors, n, limit, use_trial, use_rho, use_pm1,
verbose)
except StopIteration:
if verbose:
print complete_msg
return factors
# these are the limits for trial division which will
# be attempted in parallel with pollard methods
示例7: perfect_power
def perfect_power(n, candidates=None, big=True, factor=True):
"""
Return ``(b, e)`` such that ``n`` == ``b**e`` if ``n`` is a
perfect power; otherwise return ``False``.
By default, the base is recursively decomposed and the exponents
collected so the largest possible ``e`` is sought. If ``big=False``
then the smallest possible ``e`` (thus prime) will be chosen.
If ``candidates`` for exponents are given, they are assumed to be sorted
and the first one that is larger than the computed maximum will signal
failure for the routine.
If ``factor=True`` then simultaneous factorization of n is attempted
since finding a factor indicates the only possible root for n. This
is True by default since only a few small factors will be tested in
the course of searching for the perfect power.
Examples
========
>>> from sympy import perfect_power
>>> perfect_power(16)
(2, 4)
>>> perfect_power(16, big = False)
(4, 2)
"""
n = int(n)
if n < 3:
return False
logn = math.log(n, 2)
max_possible = int(logn) + 2 # only check values less than this
not_square = n % 10 in [2, 3, 7, 8] # squares cannot end in 2, 3, 7, 8
if not candidates:
candidates = primerange(2 + not_square, max_possible)
afactor = 2 + n % 2
for e in candidates:
if e < 3:
if e == 1 or e == 2 and not_square:
continue
if e > max_possible:
return False
# see if there is a factor present
if factor:
if n % afactor == 0:
# find what the potential power is
if afactor == 2:
e = trailing(n)
else:
e = multiplicity(afactor, n)
# if it's a trivial power we are done
if e == 1:
return False
# maybe the bth root of n is exact
r, exact = integer_nthroot(n, e)
if not exact:
# then remove this factor and check to see if
# any of e's factors are a common exponent; if
# not then it's not a perfect power
n //= afactor**e
m = perfect_power(n, candidates=primefactors(e), big=big)
if m is False:
return False
else:
r, m = m
# adjust the two exponents so the bases can
# be combined
g = igcd(m, e)
if g == 1:
return False
m //= g
e //= g
r, e = r**m*afactor**e, g
if not big:
e0 = primefactors(e)
if len(e0) > 1 or e0[0] != e:
e0 = e0[0]
r, e = r**(e//e0), e0
return r, e
else:
# get the next factor ready for the next pass through the loop
afactor = nextprime(afactor)
# Weed out downright impossible candidates
if logn/e < 40:
b = 2.0**(logn/e)
if abs(int(b + 0.5) - b) > 0.01:
continue
# now see if the plausible e makes a perfect power
r, exact = integer_nthroot(n, e)
if exact:
if big:
m = perfect_power(r, big=big, factor=factor)
if m is not False:
r, e = m[0], e*m[1]
return int(r), e
#.........这里部分代码省略.........
示例8: perfect_power
def perfect_power(n, candidates=None, big=True, factor=True):
"""
Return ``(a, b)`` such that ``n`` == ``a**b`` if ``n`` is a
perfect power; otherwise return ``None``.
By default, the base is recursively decomposed and the exponents
collected so the largest possible ``b`` is sought. If ``big=False``
then the smallest possible ``b`` (thus prime) will be chosen.
If ``candidates`` are given, they are assumed to be sorted and
the first one that is larger than the computed maximum will signal
failure for the routine.
If ``factor=True`` then simultaneous factorization of n is attempted
since finding a factor indicates the only possible root for n.
"""
n = int(n)
if n < 3:
return None
logn = math.log(n, 2)
max_possible = int(logn) + 2 # only check values less than this
not_square = n % 10 in [2, 3, 7, 8] # squares cannot end in 2, 3, 7, 8
if not candidates:
candidates = primerange(2 + not_square, max_possible)
afactor = 2 + n % 2
for b in candidates:
if b < 3:
if b == 1 or b == 2 and not_square:
continue
if b > max_possible:
return
# see if there is a factor present
if factor:
if n % afactor == 0:
# find what the potential power is
if afactor == 2:
b = trailing(n)
else:
b = multiplicity(afactor, n)
# if it's a trivial power we are done
if b == 1:
return
# maybe the bth root of n is exact
r, exact = integer_nthroot(n, b)
if not exact:
# then remove this factor and check to see if
# any of b's factors are a common exponent; if
# not then it's not a perfect power
n //= afactor**b
m = perfect_power(n, candidates=primefactors(b), big=big)
if not m:
return
else:
r, m = m
# adjust the two exponents so the bases can
# be combined
g = igcd(m, b)
m //= g
b //= g
r, b = r**m*afactor**b, g
if not big:
b0 = primefactors(b)
if len(b0) > 1 or b0[0] != b:
b0 = b0[0]
r, b = r**(b//b0), b0
return r, b
else:
# get the next factor ready for the next pass through the loop
afactor = nextprime(afactor)
# Weed out downright impossible candidates
if logn/b < 40:
a = 2.0**(logn/b)
if abs(int(a + 0.5) - a) > 0.01:
continue
# now see if the plausible b makes a perfect power
r, exact = integer_nthroot(n, b)
if exact:
if big:
m = perfect_power(r, big=big, factor=factor)
if m:
r, b = m[0], b*m[1]
return int(r), b
示例9: test_powers
def test_powers():
assert integer_nthroot(1, 2) == (1, True)
assert integer_nthroot(1, 5) == (1, True)
assert integer_nthroot(2, 1) == (2, True)
assert integer_nthroot(2, 2) == (1, False)
assert integer_nthroot(2, 5) == (1, False)
assert integer_nthroot(4, 2) == (2, True)
assert integer_nthroot(123**25, 25) == (123, True)
assert integer_nthroot(123**25+1, 25) == (123, False)
assert integer_nthroot(123**25-1, 25) == (122, False)
assert integer_nthroot(1,1) == (1, True)
assert integer_nthroot(0,1) == (0, True)
assert integer_nthroot(0,3) == (0, True)
assert integer_nthroot(10000, 1) == (10000, True)
assert integer_nthroot(4,2) == (2, True)
assert integer_nthroot(16,2) == (4, True)
assert integer_nthroot(26,2) == (5, False)
assert integer_nthroot(1234567**7, 7) == (1234567, True)
assert integer_nthroot(1234567**7+1, 7) == (1234567, False)
assert integer_nthroot(1234567**7-1, 7) == (1234566, False)
b = 25**1000
assert integer_nthroot(b, 1000) == (25, True)
assert integer_nthroot(b+1, 1000) == (25, False)
assert integer_nthroot(b-1, 1000) == (24, False)
c = 10**400
c2 = c**2
assert integer_nthroot(c2, 2) == (c, True)
assert integer_nthroot(c2+1, 2) == (c, False)
assert integer_nthroot(c2-1, 2) == (c-1, False)
assert Rational(5**3, 8**3)**Rational(4,3) == Rational(5**4, 8**4)
assert Rational(-4,7)**Rational(1,2) == I*Rational(4,7)**Rational(1,2)
assert sqrt(6) + sqrt(24) == 3*sqrt(6)
assert sqrt(2) * sqrt(3) == sqrt(6)
x = Symbol("x")
assert sqrt(49*x) == 7*sqrt(x)
assert sqrt((3-sqrt(pi))**2) == 3 - sqrt(pi)
assert sqrt(Rational(1,2)) == Rational(1,2) * sqrt(2)
# Test that this is fast
assert integer_nthroot(2,10**10) == (1, False)