Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //#include "stdafx.h"
- #include <iostream>
- #include <algorithm>
- using namespace std;
- const int MAX = 1200000;
- bool primes[MAX];
- int ulam[2009][2009];
- int n = 2;
- int up_right = 1;
- int down_left = 2;
- void sieve()
- {
- primes[0] = primes[1] = true;
- for (int i = 2; i*i < MAX; i++)
- {
- if (!primes[i])
- for (int j = 2 * i; j < MAX; j += i)
- primes[j] = true;
- }
- }
- void spiral_generation(int k)
- {
- int x = 1000, y = 1000;
- int minx = 2e9, miny = 2e9, maxx = -2e9, maxy = -2e9;
- ulam[x][y] = 1;
- while (n <= k)
- {
- if (n > k) break;
- for (int i = 1; i <= up_right; i++)
- {
- x++;;
- ulam[x][y] = n;
- maxx = max(maxx, x);
- minx = min(minx, x);
- n++;
- if (n > k) break;
- }
- if (n > k) break;
- for (int i = 1; i <= up_right; i++)
- {
- y--;
- ulam[x][y] = n;
- miny = min(miny, y);
- maxy = max(maxy, y);
- n++;
- if (n > k) break;
- }
- up_right += 2;
- if (n > k) break;
- for (int i = 1; i <= down_left; i++)
- {
- x--;
- ulam[x][y] = n;
- maxx = max(maxx, x);
- minx = min(minx, x);
- n++;
- if (n > k) break;
- }
- if (n > k) break;
- for (int i = 1; i <= down_left; i++)
- {
- y++;
- ulam[x][y] = n;
- miny = min(miny, y);
- maxy = max(maxy, y);
- n++;
- if (n > k) break;
- }
- down_left += 2;
- }
- for (int i = miny; i <= maxy; i++)
- {
- for (int j = minx; j <= maxx; j++)
- {
- if (ulam[j][i] == 0) cout << " ";
- else
- {
- if (!primes[ulam[j][i]]) cout << "#";
- else cout << ".";
- }
- }
- cout << endl;
- }
- }
- int main()
- {
- sieve();
- int k;
- cin >> k;
- if (k == 1) cout << ".";
- else if (k == 2)
- {
- cout << ".#";
- }
- else if (k == 3 || k == 4)
- {
- cout << " #" << endl << ".#";
- }
- else if (k == 5)
- {
- cout << "#.#" << endl << " .#";
- }
- else spiral_generation(k);
- // system("pause");
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement