Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Hàm số nguyên tố trong SQL

Như bạn đã nói, bạn có thể có một bảng lưu trữ tất cả các số nguyên tố lên đến 10 triệu . Sau đó, việc tra cứu xem một số có phải là số nguyên tố hay không sẽ là điều tầm thường. Câu hỏi đặt ra là phương pháp nào sẽ nhanh hơn. Tôi nghi ngờ rằng bảng sẽ nhanh hơn nhiều (Tôi chưa kiểm tra xác nhận quyền sở hữu này).

Giải pháp bảng nguyên tố

Giải pháp hàm SQL

Giải pháp 0

Đây là một giải pháp thông qua Tìm số nguyên tố bằng hàm Transact-SQL :

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
Giải pháp 1

Đây là một giải pháp khác qua làm cách nào để tìm xem là số nguyên tố hay không phải số nguyên tố với một câu lệnh select? Có nhiều thông tin hơn trong các bình luận khác.

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Có thể thực thi một tệp văn bản từ truy vấn SQL không?

  2. Giải quyết quá tải không thành công vì không thể gọi 'mới' có thể truy cập được nếu không có chuyển đổi thu hẹp

  3. Các câu lệnh soạn sẵn trong C # - truy vấn dấu @ (dấu tại / dấu strudel)

  4. FLOOR () Ví dụ trong SQL Server

  5. Sử dụng kết quả của một biểu thức (ví dụ:lệnh gọi hàm) trong danh sách tham số thủ tục được lưu trữ?