相关疑难解决方法(0)

检查变量是否为整数

如何检查变量是否为整数?

python

838
推荐指数
17
解决办法
118万
查看次数

以唯一且确定的方式将两个整数映射到一个整数

想象一下两个正整数A和B.我想将这两个整数组合成一个整数C.

可能没有其他整数D和E组合为C.因此将它们与加法运算符组合不起作用.例如30 + 10 = 40 = 40 + 0 = 39 + 1连接也不起作用.例如"31"+"2"= 312 ="3"+"12"

这种组合操作也应该是确定性的(总是在相同的输入下产生相同的结果)并且应该总是在整数的正侧或负侧产生整数.

mapping algorithm math integer deterministic

218
推荐指数
8
解决办法
9万
查看次数

检查一个数字是否是一个完美的正方形

我怎么能检查一个数字是否是一个完美的正方形?

速度无关紧要,现在,只是工作.

python math perfect-square

70
推荐指数
8
解决办法
13万
查看次数

编写自己的平方根函数

你如何编写自己的函数来找到整数的最准确的平方根?

谷歌搜索后,我发现了这个(从原始链接存档),但首先,我没有完全得到它,其次,它也是近似的.

假设平方根为最接近的整数(对于实际的根)或浮点数.

algorithm math function newtons-method square-root

69
推荐指数
8
解决办法
16万
查看次数

53
推荐指数
3
解决办法
7万
查看次数

如何计算一个非常大的整数的第n个根

我需要一种方法来计算Python中长整数的第n个根.

我试过了pow(m, 1.0/n),但它不起作用:

OverflowError:long int太大而无法转换为float

有任何想法吗?

通过长整数,我的意思是真正的长整数,如:

11968003966030964356885611480383408833172346450467339251 196093144141045683463085291115677488411620264826942334897996389 485046262847265769280883237649461122479734279424416861834396522 819159219215308460065265520143082728303864638821979329804885526 557893649662037092457130509980883789368448042961108430809620626 059287437887495827369474189818588006905358793385574832590121472 680866521970802708379837148646191567765584039175249171110593159 305029014037881475265618958103073425958633163441030267478942720 703134493880117805010891574606323700178176718412858948243785754 898788359757528163558061136758276299059029113119763557411729353 915848889261125855717014320045292143759177464380434854573300054 940683350937992500211758727939459249163046465047204851616590276 724564411037216844005877918224201569391107769029955591465502737961776799311859881060956465198859727495735498887960494256488224 613682478900505821893815926193600121890632

python math nth-root

28
推荐指数
4
解决办法
3万
查看次数

如何精确求解具有大整数系数的二次方程(整数)?

我在Google Code Jam中读到了关于bullseyes的问题.(比赛结束了,所以可以谈谈)

在此输入图像描述

玛丽亚以t毫升的黑色涂料开始,她将用它来绘制厚度为1厘米(1厘米)的戒指.厚度为1cm的环是两个同心圆之间的空间,半径相差1cm.

玛丽亚在半径为r cm的白色圆圈周围绘制了第一个黑色环.

半径为1cm的圆盘面积为πcm2.需要1毫升涂料来覆盖面积πcm2.玛丽亚可以画出的最大黑圈数量是多少?

通过我在纸上的计算,用n个环绘制一个靶心的油漆区域,内半径r,作为pi的倍数是 2*n**2 + n*(2*r-1)

因此,给定t*pi毫升的涂料,问题是找到最大的n f(n,r) <= t.

今天早上我用二进制搜索解决了这个问题https://github.com/hickford/codejam/blob/master/2013/1A/bullseye/bu​​llseye.py

我选择二次搜索而不是二次方程,因为我非常担心浮点不精确 - 在这个问题中,t和r是10**18的整数.算术不精确使我在之前的Code Jam中找到了位置.

但我很好奇.你能否支持二次方程给出具有大整数系数的方程的正确答案?像Sympy或Numpy这样的数学图书馆能为我提供什么吗?


演示二次方程给出大输入的错误答案.例如,用r=308436464205151562t=1850618785230909388.要求的二次方程是

2*n**2 + 616872928410303123*n -1850618785230909388 <= 0
Run Code Online (Sandbox Code Playgroud)

即.系数是

a = 2
b = 616872928410303123
c = -1850618785230909388
Run Code Online (Sandbox Code Playgroud)

用Python计算

    > int((-b + math.sqrt(b**2 - 4*a*c)) / (2*a))
    0
Run Code Online (Sandbox Code Playgroud)

这是错误的答案!正确的答案(通过二分搜索找到)是3

>>> n = 3
>>> 2*n**2 + 616872928410303123*n -1850618785230909388 <= 0
True
Run Code Online (Sandbox Code Playgroud)

python algorithm math equation-solving

6
推荐指数
1
解决办法
2250
查看次数

一种计算任意大整数的整数平方根(isqrt)的有效算法

注意

对于Erlang或的解决方案C / C++,请转到下面的试验4.


维基百科文章

整数平方根

  • "整数平方根"的定义可以在这里找到

计算平方根的方法

  • 可以在这里找到做"魔术"的算法

[试验1:使用库功能]

isqrt(N) when erlang:is_integer(N), N >= 0 ->
    erlang:trunc(math:sqrt(N)).
Run Code Online (Sandbox Code Playgroud)

问题

此实现使用sqrt()C库中的函数,因此它不适用于任意大整数(请注意,返回的结果与输入不匹配.正确的答案应该是12345678901234567890):

Erlang R16B03 (erts-5.10.4) [source] [64-bit] [smp:8:8] [async-threads:10] [hipe] [kernel-poll:false]

Eshell V5.10.4  (abort with ^G)
1> erlang:trunc(math:sqrt(12345678901234567890 * 12345678901234567890)).
12345678901234567168
2> 
Run Code Online (Sandbox Code Playgroud)

[试验2:+仅使用Bigint ]

isqrt2(N) when erlang:is_integer(N), N >= 0 ->
    isqrt2(N, 0, 3, 0).

isqrt2(N, I, _, Result) when I >= N ->
    Result;

isqrt2(N, …
Run Code Online (Sandbox Code Playgroud)

algorithm erlang biginteger bigint square-root

6
推荐指数
1
解决办法
4744
查看次数

Python中整数平方根的准确性

我想了解为什么会发生某些事情。我需要在 Python 中实现整数平方根 (isqrt(64) = 8 = isqrt(80))。我确信这种天真的方法:

def isqrt(n):
    return int(math.sqrt(n))
Run Code Online (Sandbox Code Playgroud)

当传递的 n 是平方数时,偶尔会失败,假设 Python 转换为浮点数,然后对浮点数执行平方根计算。例如,调用 isqrt(13*13) 我预计在转换为浮点数并计算 sqrt 后,您可能会得到类似 12.999999843 的结果,在转换为整数后会得到 12。

但是我执行了大循环和小循环测试值,并且总是得到正确的结果。毕竟,似乎没有必要为整数实现特殊的平方根!

不理解让我感到困扰,就像当本应起作用的事情失败时一样。为什么会这样?

python中还有一个关于整数平方根的问题:Integer square root in python

在那里定义的 isqrt() 中,一个 +0.5 被添加到 n,我想这正是为了解决我提到的我期待的问题,但在特定情况下找不到。

编辑:忘记指定,我使用的是 Python 2.7

python integer math.sqrt python-2.7

5
推荐指数
1
解决办法
2020
查看次数

Python math.sqrt 损失精度

我试图获取 long int 的 sqrt 值

from math import sqrt
print sqrt(410241186411534352) 

<< 640500731.0
Run Code Online (Sandbox Code Playgroud)

它返回 640500731.0,其精度确实是 640500730.999999993...。如何解决这个问题?

我按照@DSM和@Rob的回复解决了,非常感谢。

from math import sqrt
from decimal import Decimal
print Decimal(410241186411534352).sqrt() 
Run Code Online (Sandbox Code Playgroud)

python

4
推荐指数
1
解决办法
3506
查看次数