Soyle bir cozumum var c dilinde
#include <stdlib.h>
#include <stdio.h>
#include <stdint.h>
// kaca kaclik resim yapicaz?
#define LEN (1023)
// Resimi icine kaydedecegimiz dizi
int32_t izgara[LEN][LEN] = {0};
long int
sifir_bul (long int limit, char *sayilar, int baslama_indeksi)
{ // baslama indeksinden itibaren bir dizinin icinde ilk sifiri verir isaretlenmis sayiyi bulmak icin fonksiyon
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)); // bir tane dizi olustur dizinin n indeksindeki deger bize n-2 nin asal olup olmayacagini soyleyecek
if (sayilar == NULL)
{
printf ("alloke edemedi kapaniyorum");
exit (0);
}
long int indeks = 0;
while (indeks != -1)
{ // isaretlenmemis sayi kalmayana kadar yap
long int asal = indeks + 2; //
for (long int temp = indeks+2; temp < limit; temp = temp + asal)
{
sayilar[temp] = 1; // sayiyinin kaylarini isaretle
}
indeks = sifir_bul (limit, sayilar, indeks+1); // isaretlenmemis ilk sayiyi bul
}
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; // asal ise beyaza boya degil ise siyaha
//izgara[x][y] = c++; // buradaki commenti kaldirirsaniz elinize spiral sayilar gelecek
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 ; // // asal ise beyaza boya degil ise siyaha
//izgara[x][y] = c++; // buradaki commenti kaldirirsaniz elinize spiral sayilar gelecek
adim++;
}
xmax += 1;
}
//sayi spiralini yazdirmak isterseniz burayi commenti kaldirin
//for(int i = 0 ; i < LEN ; i++){
// for(int j = 0 ; j < LEN ; j++){
// printf(" %-4d ",izgara[i][j]);
// }
// printf("\n");
//}
//resmi kaydetmek icin dosya olustur
FILE * fp;
fp = fopen("ulam.pgm", "wb");
//dosyanin resim oldugunu belirten "sihirli" baslangic
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.