如果我有一个数字X,并且想说IsPrime(X) = true/false
使用sql-server,最好的方法是什么?
我只是导入素数表还是有一种算法对于较小的素数而言相当有效?
注意:我对大于约的数字不感兴趣。千万。
最终使用以下命令:
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
正如您所说,您可以拥有一个表格,其中存储着最多1000万个素数。然后,查找一个数字是否为质数将是微不足道的。然后的问题是哪种方法会更快。我怀疑桌子会快很多(我还没有测试过这个说法)。
同样在这里。提供了一些解决方案。
解决方案0
这是通过使用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
解决方案1
这是通过使用一个select语句查找素数或非素数的另一种解决方案?其他评论中也有更多信息。
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 拥有很多可用于计数和计算的内建函数。 SQL Aggregate 函数 SQL Aggregate 函数计算从列中取得的值,返回一个单一的值。 有用的 Aggregate 函数: AVG() - 返回平均值 COUNT() - 返回行数 FIRST() - 返回第一个记录的值 LAST() - 返回最后一个记录的值 MAX() - 返回最大值 MIN() - 返回最小值 SUM() - 返
MS SQL 有许多用于处理数字数据或字符串的内置函数。下面给出的列表包含有用的 SQL 内置函数: SQL Server COUNT 函数 - SQL Server COUNT 聚合函数用于计算数据库表中的行数。 SQL Server Max 函数 - SQL 中的 Max Aggregate 函数允许我们选择列的最大值。 SQL Server Min 函数 - SQL 中的 Min Aggre
主要内容:1. 创建函数,2. 调用函数,3. PL/SQL递归函数在本章中,我们将讨论和学习PL/SQL中的函数。函数与过程(也叫程序)相同,只不过函数有返回一个值,而过程没有返回值。 因此,上一章中所有有关存储过程的内容也适用于函数。 1. 创建函数 使用语句创建独立函数。语句的简化语法如下: 其中, function-name是指定要创建的函数的名称。 [OR REPLACE]选项指示是否允许修改现有的函数。 可选参数列表包含参数的名称,模式和类型。 表示将
1. 定义 慕课解释:函数可以把经常使用的代码封装起来,以便需要的时候直接调用。 本小节,我们将一起学习 SQL 函数。 2. 前言 我们在学习编程语言时候,也会遇到函数,在 SQL 中也是如此,如果你熟悉 Python 或者其它语言,那么一定使用过print这个内置函数。SQL 为了给开发者提供便利,也提供了一系例的内置函数,它们大致可分为算术函数、字符串函数、日期函数、转换函数和聚合函数五大类
FORMAT() 函数 FORMAT() 函数用于对字段的显示进行格式化。 SQL FORMAT() 语法SELECT FORMAT(column_name,format) FROM table_name; 参数 描述 column_name 必需。要格式化的字段。 format 必需。规定格式。 演示数据库 在本教程中,我们将使用 RUNOOB 样本数据库。 下面是选自 "Websites" 表
NOW() 函数 NOW() 函数返回当前系统的日期和时间。 SQL NOW() 语法SELECT NOW() FROM table_name; 演示数据库 在本教程中,我们将使用 RUNOOB 样本数据库。 下面是选自 "Websites" 表的数据: +----+--------------+---------------------------+-------+---------+ | i