sql-server - SQL Server 的前 1000 个素数
问题描述
我得到了 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
;
谢谢 !!!
解决方案
为了好玩(我觉得我可能已经回答了某人的作业,但是嘿......),就像所说的那样,Tally 会快得多:
WITH N AS (
SELECT N
FROM (VALUES(NULL),(NULL),(NULL),(NULL),(NULL),(NULL),(NULL),(NULL),(NULL),(NULL))N(N)),
Tally AS(
SELECT ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) AS I
FROM N N1, N N2, N N3), --1,000 Numbers
Remainders AS(
SELECT T1.I AS [Integer],
T2.I AS Divider,
T1.I % T2.I AS Remainder
FROM Tally T1
JOIN Tally T2 ON T1.I >= T2.I)
SELECT R.[Integer] AS PrimeNumber
FROM Remainders R
GROUP BY R.[Integer]
HAVING COUNT(CASE WHEN R.Remainder = 0 THEN 1 END) <= 2
ORDER BY R.[Integer];
当您对 1,000 行执行此操作时,这非常快,但是(不出所料)随着范围的增加,执行时间开始呈指数增长。
推荐阅读
- bloomberg - 如何将 BQL Bloomberg excel 公式实现到 python API (blpapi)?
- python - 在高度并行化的 HyperOpt 实例中,为什么 subprocess.Popen/os.system 与 > 和 2> 不起作用?
- java - 为什么 GC 不在同一方法中运行
- codeigniter - 进入实时共享主机时无法加载动态库
- salesforce - Salesforce Classic Reports:我需要能够创建一个字段,从前一个单元格中减去一个单元格的值并显示差异
- ios - 有没有办法在 SwiftUI 中创建下拉菜单/按钮?
- javascript - 我想从某个 j Query 选择器中删除包含某个值的
- jquery - 在模态的 div 内打开链接
- git - 如何修复白色 git bash 集成终端?
- javascript - 如何将 pug 模板引擎与 reactjs 一起使用