jukaukor

Taxicabnumber_GMP_unlimited.cpp

Sep 21st, 2019
169
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.61 KB | None | 0 0
  1. // Taxicabnumber_GMP_unlimited.cpp
  2. // Ohjelma etsii annettua Taxicab-lukua vastaavat lukuparit a,b
  3. // joiden summana on Taxicab-luku, siis a^3 + b^3 = Ta(n)
  4. // Ohjelma käyttää GMP-kirjastoa ja toimii myös "rajattoman" suurille luvuille
  5. // Juhani Kaukoranta 21.9.2019, parannettu 22.9.2019
  6.  
  7. #include <iostream>
  8. #include <cmath>
  9. #include <stdlib.h>
  10. #include <cinttypes>
  11. #include <iostream>
  12. #include <gmpxx.h>
  13. #include <gmp.h>
  14.  
  15. using namespace std;
  16.  
  17. mpz_t taxicabnumber,raja;
  18. clock_t t0, t1; // Time
  19.  
  20. void Taxicab();
  21.  
  22. int main()
  23. {
  24.  
  25. mpz_init(taxicabnumber);
  26. mpz_init(raja);
  27. clock_t t0, t1; // Time alku,loppu
  28.  
  29. cout << "Syötä joku näistä taxicab-numeroista:" << endl;
  30. cout << "Joko Ta(2) = 1729 , Ramanujan-Hardy -tapaamisessa Hardyn taksin numero " << endl;
  31. cout << "tai Ta(3) = 87539319, joka löydettiin vuonna 1957 tietokoneen avulla" << endl;
  32. cout << "tai Ta(4) = 6963472309248, löydettiin vuonna 1991 tietokoneen avulla" << endl;
  33. cout << "tai Ta(5) = 48988659276962496, löydettiin vuonna 1994 tietokoneen avulla" << endl;
  34. cout << "tai Ta(6) = 24153319581254312065344 , löydettiin vuonna 2008 tietokoneen avulla" << endl;
  35. cin >> taxicabnumber;
  36.  
  37. mpz_root(raja,taxicabnumber,3); // taxiroot3 =int(kuutiojuuri)
  38. mpz_add_ui(raja,raja,1); // raja = raja+1
  39. // raja = 1 + cbrt(taxicabnumber);
  40. //cout << "taxicabnumber=" << taxicabnumber <<endl;
  41. t0 = clock();
  42. Taxicab();
  43. t1 = clock();
  44. cout << "( Laskenta-aika oli: " << (double)(t1 - t0) / CLOCKS_PER_SEC << " sekuntia )" << endl;
  45. return 0;
  46. }
  47.  
  48. void Taxicab()
  49. {
  50. mpz_t tmp,temp,i,j,i3,j3,sum3;
  51. mpz_init(tmp);
  52. mpz_init(temp);
  53. mpz_init(i);
  54. mpz_init(j);
  55. mpz_set_ui(temp,0);
  56. mpz_init(i3);
  57. mpz_init(j3);
  58. mpz_init(sum3);
  59. mpz_set_ui(i,1); // i = 1
  60. int cmp;
  61. cmp = mpz_cmp(i,raja);
  62. while (cmp < 0)
  63. {
  64. mpz_pow_ui(i3,i,3); // i3 = i^3
  65. mpz_sub(tmp,taxicabnumber,i3); // tmp=taxicabnumber-i^3
  66. mpz_root(j,tmp,3); // j = cbrt(taxicabnumber-i^3)
  67. mpz_pow_ui(j3,j,3); // j3 = j^3
  68. mpz_add(sum3,i3,j3); // sum3 = i^3 + j^3
  69. cmp = mpz_cmp(sum3,taxicabnumber); // if (sum3 == taxicabnumber)
  70. if (cmp == 0)
  71. {
  72. cmp = mpz_cmp(i,temp); // if (i == temp)
  73. if (cmp == 0)
  74. {
  75. mpz_add_ui(i,i,1); // i++ eli i=i+1
  76. cmp = mpz_cmp(i,raja); // testataan onko i < raja
  77. break; // paluu whilen alkuun
  78. }
  79. cout << taxicabnumber << " on lukujen "<< i << " ja " << j << " kuutioiden summa" << endl;
  80. mpz_set(temp,j); // temp = j
  81. }
  82.  
  83. mpz_add_ui(i,i,1); // i++ eli i=i+1
  84. cmp = mpz_cmp(i,raja); // testataan onko i < raja
  85. }
  86.  
  87. }
Advertisement
Add Comment
Please, Sign In to add comment