sql >> Database teknologi >  >> RDS >> Sqlserver

SQL-primtalsfunktion

Du kunne, som du sagde, have en tabel, der gemmer alle primtallene op til 10 millioner . Så ville det være trivielt at slå op, om et tal var primtal eller ej. Spørgsmålet er så, hvilken metode der ville være hurtigere. Jeg formoder, at bordet ville være meget hurtigere (jeg har ikke testet denne påstand).

Prime Table Solution

SQL-funktionsløsninger

Løsning 0

Her er en løsning via Find primtal med en Transact-SQL-funktion :

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
Løsning 1

Her er en anden løsning via hvordan finder man ud af, om det er et primtal eller ikke-primtal med et udvalgt udsagn? Der er også flere oplysninger i andre kommentarer.

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


  1. Hibernate:hvordan kalder man en lagret funktion, der returnerer en varchar?

  2. hvorfor pdo->lastInsertId() returnerer 0, når jeg kalder STORED PROCEDURE i mysql?

  3. Hvad skal typen af ​​parameter være i Java, når det er et tidsstempel uden tidszone i postgresql?

  4. NodeJS kunne ikke oprette forbindelse til MYSQL seneste version inde i Docker Container