Advertisement
Guest User

Untitled

a guest
Jan 19th, 2018
58
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.41 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. #define io ios_base::sync_with_stdio(0), cin.tie(0), cout.tie(0);
  4. #define ll long long
  5. #define ld long double
  6. #define EPS (1e-9)
  7. #define mod 1000000007
  8. #define pii pair<int, int>
  9. #define piii pair<pii, ll>
  10. #define SIZE(x) (int)x.size()
  11. #define to_string(x) static_cast< std::ostringstream & >( \
  12. ( std::ostringstream() << std::dec << x ) ).str()
  13.  
  14. using namespace std;
  15. const ll OO = (1ll << 50);
  16. const int N = 200005;
  17. bool isPrime[N];
  18. ll n, m;
  19. vector<ll> primes;
  20. vector<piii> vec;
  21.  
  22. void sieveAtkin() {
  23. int root = ceil(sqrt(N));
  24. for (int i = 1; i <= root; ++i) {
  25. for (int j = 1; j <= root; ++j) {
  26. int n = (4 * i * i) + (j * j);
  27. if (n <= N && (n % 12 == 1 || n % 12 == 5))
  28. isPrime[n] ^= true;
  29. n = (3 * i * i) + (j * j);
  30. if (n <= N && n % 12 == 7)
  31. isPrime[n] ^= true;
  32. n = (3 * i * i) - (j * j);
  33. if (i > j && n <= N && n % 12 == 11)
  34. isPrime[n] ^= true;
  35. }
  36. }
  37. for (int i = 5; i <= root; ++i)
  38. if (isPrime[i])
  39. for (int j = i * i; j < N; j += i * i)
  40. isPrime[j] = false;
  41. primes.push_back(2ll);
  42. primes.push_back(3ll);
  43. for (int i = 5; i < N; ++i) {
  44. if (isPrime[i])
  45. primes.push_back(1ll * i);
  46. }
  47. }
  48.  
  49. int main() {
  50. // freopen("input.txt", "r", stdin);
  51. // freopen("output.txt", "w", stdout);
  52. cin >> n >> m;
  53. ll val = 1000000000;
  54. sieveAtkin();
  55. ll shortestPath = 0;
  56. for (int i = 1; i < n - 1; ++i) {
  57. piii cur;
  58. cur.first.first = i, cur.first.second = i + 1, cur.second = 1;
  59. vec.push_back(cur);
  60. --m, ++shortestPath;
  61. }
  62. ll last = upper_bound(primes.begin(), primes.end(), shortestPath) - primes.begin();
  63. //cout << last << " " << primes[last] << " " << shortestPath << endl;
  64. piii tmp;
  65. tmp.first.first = n - 1, tmp.first.second = n, tmp.second = primes[last] - shortestPath;
  66. shortestPath = primes[last];
  67. --m;
  68. vec.push_back(tmp);
  69. for (int i = 1; i <= n && m; ++i) {
  70. for (int j = i + 2; j <= n && m; ++j) {
  71. tmp.first.first = i, tmp.first.second = j, tmp.second = val;
  72. vec.push_back(tmp);
  73. --m;
  74. }
  75. }
  76. cout << shortestPath << " " << shortestPath << endl;
  77. for (auto vvvvv : vec) {
  78. cout << vvvvv.first.first << " " << vvvvv.first.second << " " << vvvvv.second << endl;
  79. }
  80. return 0;
  81. }
  82.  
  83. //for (int i = 0; i < n; ++i)
  84. //for (int j = 0; j < n; ++j)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement