假设n,a,b是正整数,其中n不是素数,因此n=ab和a≥b和(a)−b) 越小越好。如果给定n,找到a和b值的最佳算法是什么?
我读到了一个解决方案,他们试图通过搜索一个大于n的平方,将n表示为两个平方之间的差,这样S-n=(另一个平方)。为什么这比简单地找到n的素因子并搜索a,b是n的因子且a-b最小化的组合更好?
一般的方法可以是:
>
回想一下,最简单的尝试除法,素数分解是通过反复尝试将奇数(或素数)增加到数的平方根以下来除数,然后将每个因子从数中除掉,从而按构造素数(n:=n/f
)。
然后,懒洋洋地从n的素分解中依次枚举n的因子。生产一半后停止。找到了最接近平方根的n因子(不一定是素数),通过简单除法找到第二个因子。
如果这必须重复运行多次,那么预先计算n的平方根以下所需的素数将非常有用,以便在因式分解中使用。
首先......回答为什么你的方法
简单地求n的素因子并搜索其中a,b是n的因子且a-b最小化的组合
不是最优的:
假设你的号码是n=2^7*3^4*5^2*7*11*13(=259459200)
,在int
的范围内。根据组合数学理论,这个数字正好有(8*5*3*2*2*2=960)
因子。所以,首先你要找到所有这960个因子,然后找到所有的对(a,b),这样a*b=n
,在这种情况下就是(6C1 9C2 11C3 13C4 14C5 15C6 16C7 16C8)
。(如果我没有错的话,我的组合数学有点弱)。如果以最佳方式实施,其顺序为1e5
。此外,这种方法的实施也很困难。
现在,为什么平方差的方法
表示S-n=Q,使得S和Q是完美的平方
这很好:
这是因为如果可以表示S-n=Q
,这意味着,n=S-Q
=> n = s^2 - q^2
=> n = (s+q)(s-q)
=> Your reqd ans = 2 * q
现在,即使你对所有的方块进行迭代,当两个连续方块的差值大于n
但我不认为这对所有n
都是可行的(例如,如果n=6
,就没有解决(S,Q)
)
另一种方法:
从楼层(sqrt(n))
迭代到1。第一个数字(比如x),这样x |n
将是所需对(a,b)
中的一个数字。其他将是OBV,y=x/n
。因此,您的答案将是y-x
。
这是时间复杂算法。
本文向大家介绍Java数组中最大质数和最小质数之间的差异,包括了Java数组中最大质数和最小质数之间的差异的使用技巧和注意事项,需要的朋友参考一下 问题陈述 对于给定的整数数组,其中所有元素均小于1000000。找到数组中最大素数和最小素数之间的差。 示例 解 使用Eratosthenes筛分法,这是找出小于给定数的所有素数的有效方法。然后,我们将找出最大和最小的质数以获得所需的差。 示例 以下是
使用椭圆曲线分解(在Python中),我能够在~0.5秒内找到50位数字的PRIME因子。有什么方法可以将质因数转换为数字的因子吗? 通过对小数位(496和28)进行测试,将质因数按特定顺序相乘,我实现了什么。然后,将这些数字相乘,几乎就能得到因数,但这并不太灵活,因为我只从一个小的质因数列表(1,2,3,5)中得到需要相乘的公式。
我有一些用于Euler项目的代码。求最大素因子600851475143。这需要很长时间才能完成,至少需要30分钟。你们能看出来是因为我的代码太长了,还是我的代码错了。还有,有什么让运行时间更快的提示吗?
问题内容: 尽管存在SQL的ANSI标准,但为什么SQL发行版是如此非标准?SQL数据库的工作方式确实存在许多有意义的差异,还是我一直在使用的两个数据库:MS- SQL和PostgreSQL?为什么会出现这些差异? 问题答案: 这是“隐身锁定”的一种形式。乔尔在这里详细介绍: http://www.joelonsoftware.com/articles/fog0000000056.html htt
给定一个正整数的矩阵(非正方形),其中同一行上的所有元素都是可置换的,问题是最小化列的最大和和最小和之间的差异。 例如 答案是2。 我试着天真地对它进行分类(合并)
我得到了以下练习:给定一个int数组,返回递归数组中两组不同数字之间的最低绝对差异。例如:如果你有以下数组:{5,4,2}最低差异是1,因为如果你把它拆分为2组:{5},{4,2}你得到: Math.abs(5-6)=1。另一个例子:如果你有以下数组:{4,3,2,1}最低差异是0,因为如果你把它分成两个组:{4,1},{3,2}你得到:Math.abs(5-5)=0。这必须是递归的,你可以创建尽