我得到了Prime的程序,它只给出2作为输出。它应该给我所有基于我写的Java程序。
这是我为质数创建的SQL。它在SQL Server中。我想打印前1000个质数。你能告诉我这段代码中的问题吗?
DECLARE @i INT = 1
DECLARE @j INT = 2
DECLARE @COUNT INT
BEGIN
WHILE @j <= 10
BEGIN
SET @COUNT = 0
WHILE @i <= @j
BEGIN
BEGIN
IF((@j % @i) = 0)
SET @COUNT += 1
END
SET @i += 1
END
BEGIN
IF (@COUNT = 2)
PRINT @j
END
SET @j += 1
END
END
;
谢谢你们!
4条答案
按热度按时间yebdmbv41#
为了好玩(我觉得我可能已经回答了某人的家庭作业,但是嘿...),就像一个说,一个计数会快得多:
当您对1,000行执行此操作时,速度相当快,但(不出所料)随着范围的增加,执行时间开始呈指数级增加。
aemubtdh2#
要回答您提出的问题:
你能让我知道这个代码中的问题吗?
您的代码的问题在于,当您迭代到
@j
的下一个值时,您从未将@i
重置回1。5fjcxozz3#
我也有一个类似于Larnu的解决方案,但我参加了一个会议,不想浪费它,它在7秒内产生了1229个素数(所有小于10,000的素数)。
如果允许我们使用一些硬编码的值,它可以运行得更快。
编辑:最后一个版本需要1秒钟才能找到10 K以下的所有素数,但要想得到100 K以下的所有素数(9592个素数),则要长达2. 5分钟。
编辑2:这里有一个选项,它结合了两个版本来提高大数据集的性能。它也不需要一个大的计数表。
vhmi4jdf4#
这是您自己的代码,位于@Tab阿勒曼提出的解决方案的注解部分,并进行了少量修改,以将结果打印为一个字符串: