最近有人问我这样一个问题:如何用T-SQL使用最短的语句输出100以内素数?
这个输出100以内素数貌似在多年前是比较常见的面试题,但是题目中没有强调效率,只是要求最短的语句,我表示很不理解。
难不成是脑筋进转弯?
- PRINT '2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97'
应该不是,正常思路的话:
- --定义一个表变量,用来存储找到的素数
- DECLARE @t TABLE ( id INT )
- DECLARE @i INT SET @i = 2
- WHILE ( @i <= 100 )
- BEGIN
- DECLARE @j INT SET @j = SQRT(@i)
- WHILE ( @j >= 2 )
- BEGIN
- IF ( @i % @j = 0 ) BREAK SET @j = @j - 1
- END
- IF ( @j = 1 ) INSERT INTO @t SELECT @i
- SET @i = @i + 1
- END
- --查看结果
- SELECT * FROM @t
- /*
- id
- -----------
- 2
- 3
- 5
- 7
- 11
- 13
- 17
- 19
- 23
- 29
- 31
- 37
- 41
- 43
- 47
- 53
- 59
- 61
- 67
- 71
- 73
- 79
- 83
- 89
- 97
- */