Κρατώντας κάποιες επιφυλάξεις, έχω την αίσθηση ότι κάτι δεν πάει καλά...
Επιφυλάξεις:
1. Έκανα λάθη copy-paste
2. Οι αλλαγές στον κώδικα (χρήση μονίμου πίνακα για γράψιμο των πρώτων) τον αλλοίωσαν
Έτρεξα τον τροποποιημένο κώδικα που ακολουθεί σε SQL 2000 (PIV/3.0GHz, 1.5GB) και πήρε 17:50.593 να τρέξει (έγραφε...)
Ο κώδικας:
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 Primes1 where @number % prime = 0 and prime < sqrt(@number) )
begin
insert into Primes1 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
Κληθηκε με το
use Primes
declare @start datetime
declare @end datetime
select @start = getdate()
exec dotNetZone1
select @end = getdate()
select @end-@start
όπου:
- Primes = το database
- dotNetZone1 = ο παραπάνω κώδικας σε sproc
- Primes1 = ο πίνακας που έγραφα (όμοιος με τον @prime του αρχικού κώδικα)
Τρέχοντας μετά ένα select top 100 prime from Primes1, πήρα τα εξής (μάλλον λανθασμένα
) αποτελέσματα:
prime
-----------
13
15
17
19
21
23
25
27
29
31
33
35
37
39
41
43
45
47
49
51
53
55
57
59
61
63
65
67
69
71
73
75
77
79
81
83
85
87
89
91
93
95
97
99
101
103
105
107
109
111
113
115
117
119
121
123
125
127
129
131
133
135
137
139
141
143
145
147
149
151
153
155
157
159
161
163
165
167
169
171
173
175
177
179
181
183
185
187
189
191
193
197
199
201
203
205
207
209
211
213
(100 row(s) affected)
Μήπως κάτι δεν πάει καλά;
Άρης
Aris