技术开发 频道

在SQLSERVER2005中实现素数计算

【IT168 技术文档】

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