科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道在SQLSERVER2005中实现素数计算

在SQLSERVER2005中实现素数计算

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

我将提出一个挑战,谁能用SQLSEERVER提出计算素数最好的方法,我用了一个新的特点CTE和某些TSQL实现,但均不理想,前者(CTE)有限制

作者:blog 来源:blog 2007年9月18日

关键字: 素数 SQL Server SQL Server 各版本 数据库

  • 评论
  • 分享微博
  • 分享邮件

我将提出一个挑战,谁能用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)

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章