Java 计算与不带数组的另一个数最接近的素数
我有这个家庭作业,但我不能完成它,因为我只能使用关系运算符和if-else/while,我不能使用库和方法,只能使用关系运算符,如果或者while,我开始检查限制的数字是否为素数,首先检查2 3 5 7和11,然后我尝试在每个数的平方根之前使用%来确定它是否为素数,但这需要很多时间,我如何用更少的时间来计算它,对不起,这是一个罕见的解释 据我所知,如果没有数组,唯一的其他选择就是使用惰性列表,它可以用生成器来模拟。在伪代码中Java 计算与不带数组的另一个数最接近的素数,java,math,primes,Java,Math,Primes,我有这个家庭作业,但我不能完成它,因为我只能使用关系运算符和if-else/while,我不能使用库和方法,只能使用关系运算符,如果或者while,我开始检查限制的数字是否为素数,首先检查2 3 5 7和11,然后我尝试在每个数的平方根之前使用%来确定它是否为素数,但这需要很多时间,我如何用更少的时间来计算它,对不起,这是一个罕见的解释 据我所知,如果没有数组,唯一的其他选择就是使用惰性列表,它可以用生成器来模拟。在伪代码中 primes = [2..] \ [[p*p, p*p+p, ...]
primes = [2..] \ [[p*p, p*p+p, ...] for p in primes]
从一开始,这就变成了
primesFrom n = [n..] \ unionAll(
[[s,s+p..] for each p in psq
where psq = primes upto (2 * sqrt(n)),
where s = div(n+p-1, p) * p] )
我们只需要它产生的第一个数字。这里的并集当然是一个有序的,给定有序的,不断增加的源,以有序的方式产生结果,从较小的值到较大的值一个接一个
平方根的两倍用于表示覆盖范围内的最大值。您可以通过为您的范围查找基本间隙的精确值来提高精度。psq
素数可以通过试除法在生成器中逐个找到
但是现在您需要在某个地方维护这个生成器集合,并且仍然禁止使用数组
链接列表是一种可能性。它也可以通过嵌套的递归函数进行仿真,每个递归函数中都有本地静态存储,在初始化时创建它们的链,如
= [n..] \
( [s1,s1+p1..] ∪
( [s2,s2+p2..] ∪
( [s3,s3+p3..] ∪ (.... [sk,sk+pk..] ....))))
您可以看到一个示例,in Go,(and),尽管它实现了\
s链(没有∪代码>s)
这可能是一件更容易做到的事情
∪代码>虽然可以安排,为额外的。也许这是一个值得涉猎的有趣项目。如果没有数组,唯一的选择就是使用惰性列表,我知道,使用某种类型的Eratosthenes筛选(希望比使用试算法进行素性测试更复杂),这可以用生成器来模拟。在伪代码中
primes = [2..] \ [[p*p, p*p+p, ...] for p in primes]
从一开始,这就变成了
primesFrom n = [n..] \ unionAll(
[[s,s+p..] for each p in psq
where psq = primes upto (2 * sqrt(n)),
where s = div(n+p-1, p) * p] )
我们只需要它产生的第一个数字。这里的并集当然是一个有序的,给定有序的,不断增加的源,以有序的方式产生结果,从较小的值到较大的值一个接一个
平方根的两倍用于表示覆盖范围内的最大值。您可以通过为您的范围查找基本间隙的精确值来提高精度。psq
素数可以通过试除法在生成器中逐个找到
但是现在您需要在某个地方维护这个生成器集合,并且仍然禁止使用数组
链接列表是一种可能性。它也可以通过嵌套的递归函数进行仿真,每个递归函数中都有本地静态存储,在初始化时创建它们的链,如
= [n..] \
( [s1,s1+p1..] ∪
( [s2,s2+p2..] ∪
( [s3,s3+p3..] ∪ (.... [sk,sk+pk..] ....))))
您可以看到一个示例,in Go,(and),尽管它实现了\
s链(没有∪代码>s)
这可能是一件更容易做到的事情
∪代码>虽然可以安排,为额外的。也许这是一个有趣的项目。听起来更像是一个数学问题,看看这个,选择一个算法,用Java或Google实现这些算法中的一个,用Java实现你的问题很难理解。但我要告诉你一个事实。如果你需要你的代码快速,你要么必须使用数组(和一个筛选算法),要么使用一个概率素性测试,这涉及到一些复杂的数学。你确定你的老师要求你提供一个快速的程序吗?我怀疑他/她没有。。。。你只是让自己的生活变得困难!从老师的角度来看,本练习的重点是让学生学会使用算术、关系运算符和简单的控制结构编写程序。寻找素数的快速算法几乎肯定超出了编程入门课程的范围。我的建议是:按照要求去做,把节省下来的时间花在学习其他东西上。如果你好奇的话,这里有一个到概率素性测试的链接:但这通常只用于比整数范围大得多的数字,因为基本方法比整数范围快得多。听起来更像是一个数学问题,看看这个,然后选择一个算法,用Java或Google实现这些算法中的一个,用Java实现你的问题很难理解。但我要告诉你一个事实。如果你需要你的代码快速,你要么必须使用数组(和一个筛选算法),要么使用一个概率素性测试,这涉及到一些复杂的数学。你确定你的老师要求你提供一个快速的程序吗?我怀疑他/她没有。。。。你只是让自己的生活变得困难!从老师的角度来看,本练习的重点是让学生学会使用算术、关系运算符和简单的控制结构编写程序。寻找素数的快速算法几乎肯定超出了编程入门课程的范围。我的建议是:按照要求去做,把节省下来的时间花在学习其他东西上。如果你好奇的话,这里有一个到概率素性测试的链接:但这通常只适用于比整数范围大得多的数字,因为基本方法在这个范围下更快。