当前位置: 首页 > 图文教程 > 数据库 > MSSQL > 在SQLSERVER2005中实现素数计算

MSSQL
SQL数据操作基础(初级)3
SQL数据操作基础(初级)4
SQL数据操作基础(初级)5
SQL数据操作基础(中级)6
SQL数据操作基础(中级)7
SQL数据操作基础(中级)8
SQL数据操作基础(中级)9
SQL数据操作基础(中级)10
如何找出消耗cup的进程信息和执行的语句
改善SQL Server内存管理
减少SQL日志的三种方法
SQL脚本生成的一些BUG(1)
SQL脚本生成的一些BUG(2)
sqlserver日志文件总结及充满处理
启动SQL SERVER时自动执行存储过程
SQL Server 连接基础知识
修改用户定义的数据类型
利用MSSQL sp自制未公开的加密函数
让你的SQL运行速度明显提高
十大绝招保护SQL Server数据库安全

MSSQL 中的 在SQLSERVER2005中实现素数计算


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-30   浏览: 70 ::
收藏到网摘: n/a

 

我将提出一个挑战,谁能用SQLSEERVER提出计算素数最好的方法,
我用了一个新的特点CTE和某些TSQL实现,但均不理想,前者(CTE)有限制,而后者(TSQL)产生一百万个素数用了7分种
你可以干的更好么?
这儿是我的一些代码段落

(TSQL实现)
set nocount on
declare @prime table (prime int not null primary key)
--insert into @prime values (2)
--insert into @prime values (3)
--insert into @prime values (5)
--insert into @prime values (7)
--insert into @prime values (11)
declare @number int, @pc int
set @number = 13
set @pc = 1
while @pc < 1000000
begin

   if not exists (select 1 from @prime where @number % prime = 0 and prime < sqrt(@number) )
   begin
      insert into @prime select @number
      set @pc = @pc +1
   end
   set @number = @number
            + case when @number %2 = 1 then 2
                   when @number %3 = 2 then 2
                   when @number %5 = 4 then 2
                   when @number %7 = 6 then 2
                   when @number %11 = 10 then 2
              else 1 end
   end
select @pc


(CTE实现)

with seq
as( select 13 number
union all
select s.number
+ case when s.number %2 = 1 then 2
when s.number %3 = 2 then 2
when s.number %5 = 4 then 2
when s.number %7 = 6 then 2
when s.number %11 = 10 then 2
else 1 end
from seq s
where number < 32767
)
, prime as (
select s.number
from seq s
where not exists ( select 1 from seq s2 where s2.number < s.number and (s.number) % s2.number = 0)
)
select *
from prime
option (MAXRECURSION 32767)