Cliquez pour afficher
' Voici un programme basé sur le crible d'Eratosthène non optimisé (on peut mettre 8 nombres par octet)
' http://www2.lifl.fr/~delahaye/SIME/JPD/TD5_Nb-kiemeDecimation.pdf
' Recherche des nombres seconds
' On commence … 2
' second(1)=2
CONST MAX = 10000
CONST Faux = (0 = 1)
CONST Vrai = NOT (Faux)
TYPE Era
n AS LONG
d AS STRING * MAX
END TYPE
DIM SHARED Second AS Era
DIM x AS LONG, f AS STRING, k AS INTEGER
OPEN "C:\_ile\second.txt" FOR OUTPUT AS #1
CALL Init
k = 0
x = FindNext&
DO WHILE NOT (x = 0)
f = f + STR$(x)
k = k + 1
IF k > 10 THEN
PRINT f
PRINT #1, f
f = ""
k = 0
END IF
x = FindNext&
LOOP
PRINT f
PRINT #1, f
CLOSE #1
END
SUB Init
SHARED Second AS Era
Second.n = 1
Second.d = "0" + STRING$(MAX - 1, "1")
END SUB
SUB Barre (p AS LONG)
SHARED Second AS Era
DIM i AS LONG
i = p
Second.n = i
MID$(Second.d, i, 1) = "2"
i = i + p
DO WHILE i < MAX
MID$(Second.d, i, 1) = "0"
i = i + p
LOOP
END SUB
FUNCTION FindNext&
SHARED Second AS Era
DIM i AS LONG, ok AS INTEGER, n AS INTEGER, ret AS LONG
ok = Vrai
ret = 0
i = Second.n + 1
IF i < MAX THEN ok = Faux
n = 0
DO WHILE NOT (ok)
SELECT CASE VAL(MID$(Second.d, i, 1))
CASE IS = 0
CASE IS = 1
n = n + 1
IF n = 2 THEN
CALL Barre(i)
ok = Vrai
ret = i
END IF
END SELECT
i = i + 1
IF i > MAX THEN
ok = Vrai
ret = Faux
EXIT DO
END IF
LOOP
FindNext& = ret
END FUNCTION
3 5 8 13 17 22 28 31 38 43 47
53 59 67 73 77 82 89 97 101 107 113
121 127 133 139 148 151 158 163 167 179 191
197 203 209 218 227 233 241 251 257 262 269
274 281 284 293 307 313 317 322 332 343 347
353 361 367 379 386 397 401 409 419 422 431
437 443 449 457 461 467 479 491 499 509 521
526 541 547 553 557 566 571 581 593 599 607
617 622 631 643 653 661 667 673 677 691 698
703 718 721 727 739 746 757 763 769 778 781
796 809 821 827 839 842 853 857 863 869 878
883 892 911 916 919 929 941 947 956 967 974
983 994 1006 1013 1021 1033 1043 1049 1058 1063 1073
1087 1093 1099 1108 1117 1126 1129 1138 1153 1159 1171
1181 1189 1199 1202 1213 1223 1229 1237 1249 1267 1279
1283 1291 1297 1303 1318 1321 1327 1349 1361 1367 1373
1393 1402 1409 1423 1429 1438 1441 1451 1459 1471 1481
1486 1489 1499 1502 1511 1522 1531 1543 1549 1559 1567
1574 1579 1594 1601 1607 1613 1621 1627 1637 1646 1658
1667 1673 1682 1697 1702 1718 1723 1732 1741 1753 1759
1769 1777 1787 1801 1813 1817 1831 1847 1861 1871 1874
1879 1897 1903 1907 1913 1933 1942 1951 1957 1979 1982
1991 1994 1999 2009 2017 2027 2038 2053 2062 2069 2078
2083 2089 2099 2111 2122 2129 2137 2141 2153 2177 2182
2194 2206 2213 2221 2239 2246 2257 2269 2281 2291 2297
2308 2311 2321 2333 2341 2348 2357 2369 2374 2381 2386
2393 2402 2411 2422 2434 2441 2447 2453 2462 2473 2477
2501 2507 2518 2521 2539 2549 2554 2564 2579 2591 2602
2609 2614 2621 2629 2638 2657 2663 2677 2683 2689 2699
2711 2719 2729 2732 2741 2753 2767 2789 2797 2801 2806
2831 2836 2843 2854 2861 2878 2887 2894 2903 2909 2917
2927 2939 2953 2963 2969 2974 2983 2987 2999 3011 3019
3031 3041 3047 3061 3071 3079 3089 3106 3113 3121 3137
3151 3163 3167 3181 3191 3203 3209 3218 3229 3239 3244
3253 3259 3271 3299 3307 3314 3323 3329 3338 3347 3361
3373 3389 3398 3407 3413 3421 3433 3442 3457 3463 3467
3479 3494 3508 3517 3524 3529 3539 3547 3557 3566 3578
3583 3607 3613 3622 3628 3637 3643 3659 3667 3673 3691
3701 3707 3719 3727 3734 3746 3761 3769 3779 3793 3799
3803 3812 3821 3833 3847 3853 3863 3878 3889 3907 3911
3919 3929 3941 3946 3949 3973 3979 3986 3994 4003 4007
4013 4021 4027 4036 4049 4057 4073 4079 4093 4103 4111
4126 4129 4139 4157 4162 4174 4201 4207 4213 4219 4226
4231 4241 4253 4261 4271 4276 4283 4289 4297 4322 4331
4337 4349 4357 4363 4391 4406 4414 4423 4439 4447 4457
4469 4481 4486 4493 4507 4517 4523 4534 4546 4549 4561
4574 4583 4591 4603 4613 4621 4634 4639 4649 4652 4663
4678 4691 4702 4718 4723 4733 4751 4759 4766 4781 4787
4793 4799 4813 4817 4829 4834 4847 4861 4874 4889 4907
4918 4931 4934 4943 4957 4967 4973 4993 4999 5006 5011
5021 5033 5041 5059 5063 5077 5086 5093 5101 5107 5114
5129 5147 5153 5167 5179 5189 5201 5227 5233 5237 5254
5261 5266 5273 5281 5297 5309 5323 5333 5347 5357 5371
5377 5386 5393 5407 5413 5417 5426 5437 5443 5462 5477
5483 5498 5503 5509 5519 5524 5531 5554 5563 5573 5581
5591 5597 5609 5623 5639 5647 5653 5659 5669 5677 5689
5701 5711 5717 5737 5743 5753 5761 5779 5791 5801 5807
5812 5819 5827 5843 5851 5861 5869 5881 5897 5909 5923
5932 5942 5957 5978 5987 6007 6013 6037 6046 6049 6067
6074 6089 6092 6101 6113 6121 6133 6139 6151 6166 6173
6197 6203 6211 6218 6229 6238 6247 6259 6269 6277 6284
6289 6301 6317 6329 6337 6343 6349 6359 6367 6373 6379
6389 6401 6419 6427 6437 6449 6457 6469 6476 6482 6502
6514 6529 6551 6557 6563 6571 6581 6601 6607 6619 6631
6638 6649 6653 6661 6671 6679 6689 6697 6703 6713 6719
6737 6743 6763 6779 6782 6793 6803 6821 6827 6833 6839
6854 6863 6871 6889 6899 6911 6922 6932 6938 6949 6961
6971 6979 6983 6997 7001 7019 7027 7043 7054 7063 7069
7082 7093 7109 7118 7127 7133 7142 7153 7162 7186 7193
7211 7217 7222 7234 7243 7247 7253 7273 7283 7297 7309
7321 7331 7342 7351 7357 7369 7393 7411 7418 7427 7442
7457 7466 7478 7483 7489 7507 7513 7523 7534 7541 7549
7559 7573 7583 7591 7603 7607 7621 7627 7639 7646 7669
7679 7687 7699 7703 7717 7723 7727 7741 7753 7757 7762
7789 7796 7807 7823 7834 7846 7859 7862 7873 7879 7886
7901 7909 7919 7933 7937 7949 7963 7991 7999 8009 8012
8027 8038 8044 8057 8063 8078 8087 8093 8102 8116 8123
8141 8156 8161 8171 8179 8191 8207 8218 8221 8231 8237
8251 8257 8263 8269 8287 8293 8306 8311 8318 8329 8351
8354 8363 8371 8387 8407 8422 8429 8434 8447 8461 8473
8486 8503 8518 8521 8527 8539 8546 8563 8573 8581 8597
8609 8617 8627 8641 8647 8654 8663 8669 8678 8689 8699
8713 8719 8737 8746 8753 8767 8783 8797 8807 8813 8819
8831 8839 8843 8861 8867 8887 8902 8923 8929 8939 8947
8951 8966 8971 8999 9004 9011 9019 9026 9038 9043 9049
9058 9067 9091 9103 9107 9119 9133 9137 9149 9154 9161
9173 9187 9199 9209 9227 9236 9241 9253 9274 9281 9286
9301 9311 9319 9337 9343 9349 9361 9377 9389 9397 9406
9419 9431 9437 9442 9457 9461 9467 9479 9491 9508 9521
9539 9551 9557 9577 9583 9596 9601 9613 9623 9631 9647
9661 9667 9679 9689 9692 9719 9727 9733 9742 9749 9757
9769 9781 9791 9799 9806 9817 9821 9833 9839 9857 9866
9874 9887 9902 9923 9929 9937 9941 9959 9973 9977