Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python中求平方根时的截断错误_Python_Rsa_Truncate_Prime Factoring_Square Root - Fatal编程技术网

python中求平方根时的截断错误

python中求平方根时的截断错误,python,rsa,truncate,prime-factoring,square-root,Python,Rsa,Truncate,Prime Factoring,Square Root,我想用费马的因式分解法 使用n=pq=17113393402958118715148546526344227921745898507742510282855190555424972779474416264134494113作为RSA练习的因子 以下是我的python代码: def isSquare(x): return pow(int(sqrt(x)),2) - x == 0 n = 171133934029581187151485465263442279217814589

我想用费马的因式分解法 使用
n=pq=17113393402958118715148546526344227921745898507742510282855190555424972779474416264134494113作为RSA练习的因子

以下是我的python代码:

    def isSquare(x):
      return pow(int(sqrt(x)),2) - x == 0

n = 17113393402958118715148546526344227921781458985077442510282855190555424972779474416264134494113  

for i in xrange(10):
  print isSquare(n+i*i)
当我执行时,它会打印所有的
True
s,这是不正确的。我认为这是python中的截断错误。我该怎么处理呢?谢谢

def isqrt(n):
    x = n
    y = (x + n // x) // 2
    while y < x:
        x = y
        y = (x + n // x) // 2
    return x

print isqrt(99999999999**2)
for i in xrange(130000,140000):
  if isqrt(n + i*i) ** 2 == n + i*i:
    print isqrt(n + i*i)
print "done"
def isqrt(n):
x=n
y=(x+n//x)//2
当y
math.sqrt使用不精确的浮点数


最简单的方法可能是将sqrt更改为整数isqrt函数,您只需从

math复制体面的isqrt实现即可。sqrt使用不精确的浮点数


最简单的方法可能是将sqrt更改为整数isqrt函数,您只需从

math复制体面的isqrt实现即可。sqrt使用不精确的浮点数


最简单的方法可能是将sqrt更改为整数isqrt函数,您只需从

math复制体面的isqrt实现即可。sqrt使用不精确的浮点数


最简单的方法可能是将sqrt更改为整数isqrt函数,您只需从

复制像样的isqrt实现即可。您可以使用牛顿方法查找数字的整数平方根:

def isqrt(n):
    x = n
    y = (x + n // x) // 2
    while y < x:
        x = y
        y = (x + n // x) // 2
    return x
def isqrt(n):
x=n
y=(x+n//x)//2
当y
这将返回最大整数x,使得x×x不超过n


但是Fermat的方法不太可能将你的95位RSA半素数因子化。您应该查看二次筛或数字域筛来计算该大小的数字。

您可以使用牛顿法来计算数字的整数平方根:

def isqrt(n):
    x = n
    y = (x + n // x) // 2
    while y < x:
        x = y
        y = (x + n // x) // 2
    return x
def isqrt(n):
x=n
y=(x+n//x)//2
当y
这将返回最大整数x,使得x×x不超过n


但是Fermat的方法不太可能将你的95位RSA半素数因子化。您应该查看二次筛或数字域筛来计算该大小的数字。

您可以使用牛顿法来计算数字的整数平方根:

def isqrt(n):
    x = n
    y = (x + n // x) // 2
    while y < x:
        x = y
        y = (x + n // x) // 2
    return x
def isqrt(n):
x=n
y=(x+n//x)//2
当y
这将返回最大整数x,使得x×x不超过n


但是Fermat的方法不太可能将你的95位RSA半素数因子化。您应该查看二次筛或数字域筛来计算该大小的数字。

您可以使用牛顿法来计算数字的整数平方根:

def isqrt(n):
    x = n
    y = (x + n // x) // 2
    while y < x:
        x = y
        y = (x + n // x) // 2
    return x
def isqrt(n):
x=n
y=(x+n//x)//2
当y
这将返回最大整数x,使得x×x不超过n


但是Fermat的方法不太可能将你的95位RSA半素数因子化。您应该查看二次筛选或数字字段筛选,以将该大小的数字作为因子。

您可以尝试在模块数学之外使用sqrt()函数。代码可能如下所示:

import math
n = math.sqrt(int(raw_input("Enter a number\n")))
print n

您可以尝试在模块数学之外使用sqrt()函数。代码可能如下所示:

import math
n = math.sqrt(int(raw_input("Enter a number\n")))
print n

您可以尝试在模块数学之外使用sqrt()函数。代码可能如下所示:

import math
n = math.sqrt(int(raw_input("Enter a number\n")))
print n

您可以尝试在模块数学之外使用sqrt()函数。代码可能如下所示:

import math
n = math.sqrt(int(raw_input("Enter a number\n")))
print n


math.sqrt()
float
上运行(它无法保持您似乎需要的范围)。我建议使用
Decimal
,或者更好的是使用一个数学库。您可以使用著名的
SymPy
库来实现这一点:
math.sqrt()
float
进行操作(它无法保持您似乎需要的范围)。我建议使用
Decimal
,或者更好的是使用一个数学库。您可以使用著名的
SymPy
库来实现这一点:
math.sqrt()
float
进行操作(它无法保持您似乎需要的范围)。我建议使用
Decimal
,或者更好的是使用一个数学库。您可以使用著名的
SymPy
库来实现这一点:
math.sqrt()
float
进行操作(它无法保持您似乎需要的范围)。我会说使用
Decimal
,或者更好的是使用一个数学库。你可以使用著名的
SymPy
库来做到这一点:那么,如果I**2==n:返回I#raise ValueError('输入不是一个完美的正方形'),为什么这项工作更好else:return 0我指的是最佳答案中的代码,而不是问题中的代码。我已经更正了链接,让它更精确。谢谢你,谢尔盖。//做什么?“//”是整数除法。7//2等于3。“/”在早期的Python版本中可以用作整数除法,但在较新的版本中,7/2是3.5;//在Python 2.7中也适用吗?那么,如果i**2==n:return i#raise ValueError('输入不是一个完美的正方形'),为什么定义isqrt(n):i=int(sqrt(n)+0.5会更好else:return 0我指的是最佳答案中的代码,而不是问题中的代码。我已经更正了链接,让它更精确。谢谢你,谢尔盖。//做什么?“//”是整数除法。7//2等于3。“/”在早期的Python版本中可以用作整数除法,但在较新的版本中,7/2是3.5;//在Python 2.7中也可以用作整数除法吗?那么,为什么在def isqrt(n)中使用它会更好呢