Fichier spirale_ulam.jps — Modifié le 6 Juillet 2006 à 12 h 02
-20 20 setxrange
-20 20 setyrange
20 setxunit
0 setlinewidth
/fillstyle {-10 10 .95 {rouge} {blanc} 0 gradientcirclefill} def
%% version naive pour savoir si un nb est premier
/isprime {
3 dict begin
/x exch def
/i 3 def
/n x sqrt floor 1 add def
x 2 eq {
true
} {
x 2 lt x 2 mod 0 eq {
%% x < 2 ou x pair
false
} {
{
x i mod 0 eq {
%% x divisible par i
x i eq {
true
} {
false
} ifelse
exit
} {
/i i 2 add store
i n gt {
true
exit
} if
} ifelse
} loop
} ifelse
} ifelse
end
} def
/decalage [0 1 0 -1] def
/decalunit 2 def
/decalx_ind 0 def
/decaly_ind 3 def
/n 1 def
/gradnumlines 50 def
/M {0 0} def
/nombre 41 def
20 setfontsize
setTimes
nombre isprime {
/fillstyle {-10 10 .95 {bleu} {blanc} 0 gradientcirclefill} store
} if
O 1 cercle*
nombre ( ) cvs M cctext
30 {
/decalx_ind decalx_ind 1 add 4 mod store
/decaly_ind decaly_ind 1 add 4 mod store
/decalx decalage decalx_ind get def
/decaly decalage decaly_ind get def
n floor cvi {
M decalx decaly decalunit mulv addv /M defpoint
/nombre nombre 1 add store
nombre isprime {
/fillstyle {-10 10 .95 {bleu} {blanc} 0 gradientcirclefill} store
} {
/fillstyle {-10 10 .95 {rouge} {blanc} 0 gradientcirclefill} store
} ifelse
M 1 cercle*
nombre ( ) cvs M cctext
} repeat
/n n .5 add store
} repeat