Soyle bir cozumum var c dilinde
#include <stdlib.h>
#include <stdio.h>
#include <stdint.h>
#define LEN (1023)
int32_t izgara[LEN][LEN] = {0};
long int
sifir_bul (long int limit, char *sayilar, int baslama_indeksi)
{
int ret = -1;
for (long int ctr = baslama_indeksi; ctr < limit; ctr++)
{
if (sayilar[ctr] == 0)
{
ret = ctr;
break;
}
}
return ret;
}
char*
asallari_bul (long int limit)
{
char *sayilar = calloc (limit, sizeof (char));
if (sayilar == NULL)
{
printf ("alloke edemedi kapaniyorum");
exit (0);
}
long int indeks = 0;
while (indeks != -1)
{
long int asal = indeks + 2;
for (long int temp = indeks+2; temp < limit; temp = temp + asal)
{
sayilar[temp] = 1;
}
indeks = sifir_bul (limit, sayilar, indeks+1);
}
return (sayilar);
}
int main(){
int32_t c = 0;
int32_t x= (LEN / 2)-1 ;
int32_t y = (LEN / 2)-1 ;
int32_t xmax = 2;
int32_t ymax = 1;
int j = -1;
int adim = 0;
char* asallar = asallari_bul(LEN*LEN + 2);
izgara[x][y] = c++;
y=y+1;
izgara[x][y] = c++;
while(c < LEN*LEN){
j *=-1;
adim = 0;
while(adim < ymax && y < LEN && y >= 0 && c < LEN*LEN){
y = y+j;
izgara[x][y] = asallar[c++] == 0 ? 255 : 1;
adim++;
}
ymax += 1;
adim = 0;
while(adim < xmax && x < LEN && x >= 0 && c < LEN*LEN){
x = x+j;
izgara[x][y] = asallar[c++] == 0 ? 255 : 1 ;
adim++;
}
xmax += 1;
}
FILE * fp;
fp = fopen("ulam.pgm", "wb");
fprintf(fp, "P5\n %s\n %d\n %d\n %d\n", "", LEN, LEN,
255);
fwrite(izgara, sizeof(izgara), 1, fp);
fclose(fp);
free(asallar);
return 0;
}
Sonucu da soyle gorunuyor

Not: Site ppm formatini kabul etmedigi icin jpg ye cevirdim.