Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Taxicabnumber_GMP.cpp
- // Ta(6) = 24153319581254312065344 löydettiin vuonna 2008 tietokoneen avulla
- // Etsitään Ta(6) vastaavat kuusi kokonaislukuparia (a,b)
- // joille a^3 + b^3 = Ta(6)
- // Koska Ta(6) on yli 64-bittinen, käytetään arbitrary precision integers GMP-kirjastoa
- // Juhani Kaukoranta 21.9.2019
- // raja = 28906285
- #include <iostream>
- #include <cmath>
- #include <stdlib.h>
- #include <cinttypes>
- #include <iostream>
- #include <gmpxx.h>
- #include <gmp.h>
- using namespace std;
- mpz_t taxicabnumber, rajaz,taxiroot3;
- unsigned long long raja; // for-loopin yläraja
- clock_t t0, t1; // Time
- void Taxicab();
- int main()
- {
- mpz_init(taxicabnumber);
- mpz_init(rajaz); // 1+int(kuutiojuuri(taxicabnumber))
- mpz_init(taxiroot3); // int(kuutiojuuri(taxicabnumber))
- clock_t t0, t1; // Time alku,loppu
- cout << "Syötä joku näistä taxicab-numeroista:" << endl;
- cout << "Joko Ta(2) = 1729 , Ramanujan-Hardy -tapaamisessa Hardyn taksin numero " << endl;
- cout << "tai Ta(3) = 87539319, joka löydettiin vuonna 1957 tietokoneen avulla" << endl;
- cout << "tai Ta(4) = 6963472309248, löydettiin vuonna 1991 tietokoneen avulla" << endl;
- cout << "tai Ta(5) = 48988659276962496, löydettiin vuonna 1994 tietokoneen avulla" << endl;
- cout << "tai Ta(6) = 24153319581254312065344 , löydettiin vuonna 2008 tietokoneen avulla" << endl;
- cin >> taxicabnumber;
- mpz_root(taxiroot3,taxicabnumber,3); // taxiroot3 =int(kuutiojuuri(taxicabnumber))
- mpz_add_ui(rajaz,taxiroot3,1); // rajaz = 1+taxiroot3
- raja = mpz_get_ui(rajaz); // raja for-loopia varten
- cout << "taxicabnumber=" << taxicabnumber <<endl;
- t0 = clock();
- Taxicab();
- t1 = clock();
- cout << "( Laskenta-aika oli: " << (double)(t1 - t0) / CLOCKS_PER_SEC << " sekuntia )" << endl;
- return 0;
- }
- void Taxicab()
- {
- mpz_t tmp,temp,j,i3,j3,sum3;
- mpz_init(tmp);
- mpz_init(temp);
- mpz_init(j);
- mpz_set_ui(temp,0);
- mpz_init(i3);
- mpz_init(j3);
- mpz_init(sum3);
- int cmp = 0;
- unsigned long long i;
- for (i = 1; i < raja; i++)
- {
- mpz_ui_pow_ui(i3,i,3); // i3 = i^3
- mpz_sub(tmp,taxicabnumber,i3); // tmp=taxicabnumber-i^3
- mpz_root(j,tmp,3); // j = cbrt(taxicabnumber-i^3)
- mpz_pow_ui(j3,j,3); // j3 = j^3
- mpz_add(sum3,i3,j3); // sum3 = i^3 + j^3
- cmp = mpz_cmp(sum3,taxicabnumber); // if (sum3 == taxicabnumber)
- if (cmp == 0)
- {
- cmp = mpz_cmp_ui(temp,i); // if (i == temp)
- if (cmp == 0)
- {
- break; // hyppy whileen
- }
- cout << taxicabnumber << " on lukujen "<< i << " ja " << j << " kuutioiden summa" << endl;
- mpz_set(temp,j); // temp = j
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement