SQL Prime编号功能

发布时间:2020-03-26 发布网站:脚本之家
脚本之家收集整理的这篇文章主要介绍了SQL Prime编号功能脚本之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
如果我有一个数字X,并想使用sql-server说IsPrime(X)= true / false,最好的方法是什么?

我只是导入一个素数表还是有一个算法对于较小的素数是相当有效的?

注意:我对大于约的数字不感兴趣.千万.

结束使用以下内容:

CREATE FUNCTION [dbo].[isPrime]
(
    @number INT
)
RETURNS VARCHAR(10)

BEGIN


    DECLARE @retVal VARCHAR(10) = 'TRUE';

    DECLARE @x INT = 1;
    DECLARE @y INT = 0;

    WHILE (@x <= @number )
    BEGIN

            IF (( @number % @x) = 0 )
            BEGIN
                SET @y = @y + 1;
            END

            IF (@y > 2 )
            BEGIN
                SET @retVal = 'FALSE'
                BREAK
            END

            SET @x = @x + 1

    END

    RETURN @retVal
END

解决方法

正如你所说,你可以有一张 stores all the primes up to 10 million的表格.然后查看一个数字是否为素数是微不足道的.那么问题是哪种方法会更快.我怀疑桌子会快得多(我没有测试过这个说法).

Prime Table解决方案

> https://www.simple-talk.com/sql/t-sql-programming/celkos-summer-sql-stumpers-prime-numbers/提供一些解决方案,评论中还有更多.
> http://sqlblog.com/blogs/hugo_kornelis/archive/2006/09/23/Prime-numbers.aspx
同样在这里.提供了一些解决方案.

SQL函数解决方案

解决方案0

这是Finding prime numbers with a Transact-SQL function的一个解决方案:

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
–- =============================================
–- Author:        Nicolas Verhaeghe
–- Create date: 12/14/2008
–- Description:   Determines if a given integer is a prime
/*

      SELECT dbo.IsPrime(1)

      SELECT dbo.IsPrime(9)

      SELECT dbo.IsPrime(7867)

*/
–- =============================================
CREATE FUNCTION [dbo].[isPrime]
(
      @NumberToTest int
)
RETURNS bit
AS
BEGIN
      -– Declare the return variable here
      DECLARE @IsPrime bit,@Divider int

      –- To speed things up,we will only attempt dividing by odd numbers

      –- We first take care of all evens,except 2
      IF (@NumberToTest % 2 = 0 AND @NumberToTest > 2)
            SET @IsPrime = 0
      ELSE
            SET @IsPrime = 1 –- By default,declare the number a prime

      –- We then use a loop to attempt to disprove the number is a prime

      SET @Divider = 3 -– Start with the first odd superior to 1

      –- We loop up through the odds until the square root of the number to test
      –- or until we disprove the number is a prime
      WHILE (@Divider <= floor(sqrt(@NumberToTest))) AND (@IsPrime = 1)
      BEGIN

            –- Simply use a modulo
            IF @NumberToTest % @Divider = 0
                  SET @IsPrime = 0
            –- We only consider odds,therefore the step is 2
            SET @Divider = @Divider + 2
      END  

      –- Return the result of the function
      RETURN @IsPrime

END

解决方案1

这是通过how to find whether is a prime or non prime with one select statement?的另一个解决方案.其他评论中还有更多信息.

CREATE FUNCTION isPrime
(
    @number INT
)
RETURNS VARCHAR(10)
BEGIN
    DECLARE @prime_or_notPrime INT
    DECLARE @counter INT
    DECLARE @retVal VARCHAR(10)
    SET @retVal = 'FALSE'

    SET @prime_or_notPrime = 1
    SET @counter = 2

    WHILE (@counter <= @number/2 )
    BEGIN

        IF (( @number % @counter) = 0 )
        BEGIN
            set @prime_or_notPrime = 0
            BREAK
        END

        IF (@prime_or_notPrime = 1 )
        BEGIN
            SET @retVal = 'TRUE'
        END

        SET @counter = @counter + 1
    END
    return @retVal
END

总结

以上是脚本之家为你收集整理的SQL Prime编号功能全部内容,希望文章能够帮你解决SQL Prime编号功能所遇到的程序开发问题。

其他人正在看

如果觉得脚本之家网站内容还不错,欢迎将脚本之家网站推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您喜欢交流学习经验,点击链接加入脚本之家官方QQ群:1065694478
标签: