首页 > 解决方案 > 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
    ;

谢谢 !!!

标签: sql-server

解决方案


为了好玩(我觉得我可能已经回答了某人的作业,但是嘿......),就像所说的那样,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 行执行此操作时,这非常快,但是(不出所料)随着范围的增加,执行时间开始呈指数增长。


推荐阅读