#include #include #include #include #include using namespace std; const int N = 999; const int l_watkow = 4; unsigned char tab[N][N][3]; int ulam_get_map(int x, int y, int n) { x -= (n-1)/2; y -= n/2; int mx = abs(x), my = abs(y); int l = 2*max(mx, my); int d = y >= x ? l*3 + x + y : l - x - y; return pow(l-1,2)+d; } int isprime(int n) { for (int p = 2; p*p <= n; p++) if (n % p == 0) return 0; return n > 2; } int main() { auto ulam=[](int x, int y) { for (int i = x; i < x + 0.5*N; i++) for (int j = y; j < y + 0.5*N; j++) if (isprime(ulam_get_map(i, j, N))) for (int k=0;k<3;k++) tab[i][j][k] = 0; else for (int k=0;k<3;k++) tab[i][j][k] = 255; }; vector v; for (int i = 0; i < l_watkow; i++) { int x = 2*N*(i%2)/l_watkow; int y = 2*N*int(i/2)/l_watkow; v.push_back(thread(ulam, x, y)); } for (int i = 0; i < l_watkow; i++) v[i].join(); FILE *fp= fopen("39247_lab4_poprawione.ppm","wb"); fprintf(fp,"P6\n %s\n %d\n %d\n %d\n","# ",N,N,255); for (int i = 0; i < N; i++) for (int j = 0; j < N; j++) fwrite(tab[i][j],1,3,fp); fclose(fp); return 0; }