-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