2016年4月5日

タクシー数という概念があるらしい.立方数の和として$n$通りに表される最小の正の整数を$\mathrm{Ta(n)}$と書くらしい.言うまでもなく,ラマヌジャンとハーディーのタクシー話に基づく.つまり$\mathrm{Ta}(2) = 1729$である.

Wikipediaによると存在は知られていて,$n = 6$までは決定済み,$n = 7$は上からの評価のみのようである.というわけで,下の方を計算してみようかと適当なプログラムをでっち上げてみた.

#include <iostream>
#include <map>
#include <vector>
#include <boost/multiprecision/cpp_int.hpp>
using namespace std;
using namespace boost::multiprecision;

int main(int argc,char *argv[]){
    static const cpp_int N = 10000000000;
    static const int n = 4;
    std::map<cpp_int,vector<cpp_int>> results;
    for(cpp_int i = 1 ; i < 2*N ; ++i){
        if(i % 1000 == 0)cout << "i = " << i << endl;
        for(cpp_int j = 1 ; j < i/2 + 1 ; ++j){
            cpp_int k = i - j;
            auto x = k*k*k + j*j*j;
            results[x].push_back(k);
            results[x].push_back(j);
            if(results[x].size() >= 2*n){
                cout << x;
                for(int a = 0 ; a < results[x].size()/2 ; ++a){
                    cout << " = " << results[x][2*a] << "^3 + " << results[x][2*a + 1] << "^3";
                }
                cout << endl;
                return 0;
            }
        }
    }
    cout << "not found" << endl;
    return 0;
}

$n = 3$までは大丈夫だったのだが,$n = 4$でメモリ不足で落ちた.単純に三乗和を計算して全部突っ込んでいるので,そりゃ辛いか…….

0 件のコメント:

コメントを投稿

コメントの追加にはサードパーティーCookieの許可が必要です