Advertisement
Guest User

Untitled

a guest
May 31st, 2012
123
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.15 KB | None | 0 0
  1. #pragma comment(linker, "/STACK:268435456")
  2. #define _CRT_SECURE_NO_WARNINGS
  3. #include <cstdio>
  4. #include <iostream>
  5. #include <algorithm>
  6. #include <cmath>
  7. #include <string>
  8. #include <vector>
  9. #include <set>
  10. #include <map>
  11. #include <deque>
  12. #include <queue>
  13. #include <list>
  14. #include <cstring>
  15. #include <complex>
  16. #include <ctime>
  17. #include <bitset>
  18. #include <iomanip>
  19. #include <sstream>
  20. using namespace std;
  21. const double PI = 3.1415926535897932384626433832795;
  22. template<class T> T min(T &a, T &b) { return (a<b) ? a : b; }
  23. template<class T> T max(T &a, T &b) { return (a>b) ? a : b; }
  24. template<class T> T sqr(T &a) { return a*a; }
  25. template<class T> T abs(T &a) { return (a<0) ? (-a) : a; }
  26. typedef long long ll;
  27. typedef long long LL;
  28. typedef pair<int,int> ii;
  29. #define all(v) (v).begin(),(v).end()
  30. #define sz(v) ((int)((v).size()))
  31. #define PB push_back
  32. #define MP make_pair
  33. #define CLR(a) memset((a),0,sizeof(a))
  34. #define fori(i,n) for(int i=0;i<(n);i++)
  35. //------------------------------------------------------------------------------
  36.  
  37. bool used[805];
  38.  
  39. ll gcd(ll a, ll b) {
  40.     return b == 0 ? a : gcd(b, a%b);
  41. }
  42.  
  43. int p[805];
  44.  
  45. int main()
  46. {
  47. #ifdef _MSC_VER
  48.     freopen("input.txt", "r", stdin);
  49.     freopen("output.txt", "w", stdout);
  50. #else
  51.     freopen("doubledealing.in", "r", stdin);
  52.     freopen("doubledealing.out", "w", stdout);
  53. #endif
  54.     int n, k;
  55.     while (true) {
  56.         scanf("%d%d", &n, &k);
  57.         if (n == 0 && k == 0) break;
  58.        
  59.         /*vector<vector<int> > a(k,  vector<int>());
  60.         for (int i = 0; i < n; i++) {
  61.             a[i%k].PB(i);
  62.         }
  63.         vector<int> p;
  64.         for (int i = 0; i < k; i++) {
  65.             for (int j = sz(a[i])-1; j >= 0; j--) {
  66.                 p.PB(a[i][j]);
  67.             }
  68.         }*/
  69.         int len = 0;
  70.         int nn = n/k*k;
  71.         for (int i = 0; i < k; i++) {
  72.             int last = nn + i;
  73.             if (last >= n) last -= k;
  74.             for (int j = last; j >= 0; j -= k) {
  75.                 p[len++] = j;
  76.             }
  77.         }
  78.         ll ans = 1;
  79.         CLR(used);
  80.         for (int i = 0; i < n; i++) {
  81.             if (!used[i]) {
  82.                 int x = 1;
  83.                 used[i] = true;
  84.                 int k = p[i];
  85.                 while (true) {
  86.                     if (k == i) break;
  87.                     x++;
  88.                     used[k] = true;
  89.                     k = p[k];
  90.                 }
  91.                 ans = ans / gcd(ans,x) * x;
  92.             }
  93.         }
  94.         printf("%lld\n", ans);
  95.     }
  96. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement