fork(1) download
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. unsigned long long gcd(unsigned long long m, unsigned long long n)
  5. {
  6. while(m && n) if (m < n) n %= m; else m %= n;
  7. return m + n;
  8. }
  9.  
  10. void egypt(unsigned long long a, unsigned long long b)
  11. {
  12. unsigned long long g = gcd(a,b);
  13.  
  14. if (g != 1) { a/=g; b/=g;}
  15.  
  16. if (a > b)
  17. {
  18. cout << a/b;
  19. a %= b;
  20. if (a == 0)
  21. {
  22. cout << endl;
  23. return;
  24. }
  25. else
  26. {
  27. cout << " + ";
  28. egypt(a,b);
  29. }
  30. }
  31. else if (a == 1)
  32. {
  33. cout << "1/" << b << endl;
  34. return;
  35. }
  36. else
  37. {
  38. unsigned long long n = (b+a)/a;
  39. cout << "1/" << n << " + ";
  40. egypt(a*n-b,b*n);
  41. }
  42. }
  43.  
  44.  
  45.  
  46. int main(int argc, const char * argv[])
  47. {
  48. egypt(10,7);
  49. egypt(37,15);
  50. egypt(43,48);
  51. egypt(5,121);
  52. }
  53.  
Success #stdin #stdout 0s 15240KB
stdin
Standard input is empty
stdout
1 + 1/3 + 1/11 + 1/231
2 + 1/3 + 1/8 + 1/120
1/2 + 1/3 + 1/16
1/25 + 1/757 + 1/763309 + 1/873960180913 + 1/1025410058030422033