Advertisement
jukaukor

Taxicabnumbers_GMP.cpp

Sep 21st, 2019
174
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.65 KB | None | 0 0
  1. // Taxicabnumber_GMP.cpp
  2. // Ta(6) = 24153319581254312065344 löydettiin vuonna 2008 tietokoneen avulla
  3. // Etsitään Ta(6) vastaavat kuusi kokonaislukuparia (a,b)
  4. // joille a^3 + b^3 = Ta(6)
  5. // Koska Ta(6) on yli 64-bittinen, käytetään arbitrary precision integers GMP-kirjastoa
  6. // Juhani Kaukoranta 21.9.2019
  7. // raja = 28906285
  8. #include <iostream>
  9. #include <cmath>
  10. #include <stdlib.h>
  11. #include <cinttypes>
  12. #include <iostream>
  13. #include <gmpxx.h>
  14. #include <gmp.h>
  15.  
  16. using namespace std;
  17.  
  18.  
  19. mpz_t taxicabnumber, rajaz,taxiroot3;
  20. unsigned long long raja; // for-loopin yläraja
  21.  
  22.  
  23.  
  24. clock_t t0, t1; // Time
  25.  
  26. void Taxicab();
  27.  
  28. int main()
  29. {
  30.  
  31. mpz_init(taxicabnumber);
  32. mpz_init(rajaz); // 1+int(kuutiojuuri(taxicabnumber))
  33. mpz_init(taxiroot3); // int(kuutiojuuri(taxicabnumber))
  34.  
  35.  
  36.  
  37.  
  38. clock_t t0, t1; // Time alku,loppu
  39.  
  40.  
  41. cout << "Syötä joku näistä taxicab-numeroista:" << endl;
  42. cout << "Joko Ta(2) = 1729 , Ramanujan-Hardy -tapaamisessa Hardyn taksin numero " << endl;
  43. cout << "tai Ta(3) = 87539319, joka löydettiin vuonna 1957 tietokoneen avulla" << endl;
  44. cout << "tai Ta(4) = 6963472309248, löydettiin vuonna 1991 tietokoneen avulla" << endl;
  45. cout << "tai Ta(5) = 48988659276962496, löydettiin vuonna 1994 tietokoneen avulla" << endl;
  46. cout << "tai Ta(6) = 24153319581254312065344 , löydettiin vuonna 2008 tietokoneen avulla" << endl;
  47. cin >> taxicabnumber;
  48.  
  49. mpz_root(taxiroot3,taxicabnumber,3); // taxiroot3 =int(kuutiojuuri(taxicabnumber))
  50. mpz_add_ui(rajaz,taxiroot3,1); // rajaz = 1+taxiroot3
  51. raja = mpz_get_ui(rajaz); // raja for-loopia varten
  52. cout << "taxicabnumber=" << taxicabnumber <<endl;
  53. t0 = clock();
  54. Taxicab();
  55. t1 = clock();
  56. cout << "( Laskenta-aika oli: " << (double)(t1 - t0) / CLOCKS_PER_SEC << " sekuntia )" << endl;
  57. return 0;
  58. }
  59.  
  60. void Taxicab()
  61. {
  62. mpz_t tmp,temp,j,i3,j3,sum3;
  63. mpz_init(tmp);
  64. mpz_init(temp);
  65. mpz_init(j);
  66. mpz_set_ui(temp,0);
  67. mpz_init(i3);
  68. mpz_init(j3);
  69. mpz_init(sum3);
  70.  
  71. int cmp = 0;
  72. unsigned long long i;
  73.  
  74.  
  75. for (i = 1; i < raja; i++)
  76.  
  77. {
  78. mpz_ui_pow_ui(i3,i,3); // i3 = i^3
  79. mpz_sub(tmp,taxicabnumber,i3); // tmp=taxicabnumber-i^3
  80. mpz_root(j,tmp,3); // j = cbrt(taxicabnumber-i^3)
  81. mpz_pow_ui(j3,j,3); // j3 = j^3
  82. mpz_add(sum3,i3,j3); // sum3 = i^3 + j^3
  83. cmp = mpz_cmp(sum3,taxicabnumber); // if (sum3 == taxicabnumber)
  84. if (cmp == 0)
  85. {
  86. cmp = mpz_cmp_ui(temp,i); // if (i == temp)
  87. if (cmp == 0)
  88. {
  89. break; // hyppy whileen
  90. }
  91. cout << taxicabnumber << " on lukujen "<< i << " ja " << j << " kuutioiden summa" << endl;
  92. mpz_set(temp,j); // temp = j
  93. }
  94.  
  95. }
  96. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement