-1

数を素数に因数分解するために多数を処理する必要があるこのプログラムがあります.RSA因数分解の課題と同じです。

このリストは、素数を含む txt ファイルで取得しました。これは、そのリストを作成するために使用するコードです。

int export_list (int lim = 50)
{
    int last_in_txt = 0;
    {
        ifstream infile ("Primes.txt");
        int k;
        while(infile >> k)
        { last_in_txt = k; }
    }
    // Now last_in_txt is assigned properly, and Primes.txt is closed

    cout << "\nLast number in \"Primes.txt\": " << last_in_txt << endl << endl;
    cout << "Press <Enter> to start appending primes... ";
    cin.get();
    cout << "\nAppend started:\n";

    last_in_txt++;

    ofstream file ("Primes.txt" , ios::app);
    int x, counter;

    if (file.is_open()) // if it opens correctly
    {
        for (x = last_in_txt , counter = 0 ; counter < lim ; x++ , counter++)
        {
            if (check_prime (x)) // returns 1 when x is prime, returns 0 when not
            {
                cout << "Appending " << x << "\t\t" << "Estimated time remaining: " << (lim - counter) / 1000 <<endl;
                file << x << " ";
            }
        }
        cout << "Done!" << endl << endl << pressenter;
        cin.get();
    }
    else
    {
        cout << "Unable to open file" << endl << pressenter;
        cin.get();
    }
    return(0);
}

問題は、このtxtファイルに32ビットを超える数値が含まれているという点に到達すると、それらを処理しません...そして、last_in_txt変数は常に32ビットを超えないtxtファイルの最後の数値を格納します...

4

1 に答える 1

1

64 ビット整数で十分な場合は、int64_t を使用します。より大きな数が必要な場合は、この質問を確認してください: Bigint (bigbit) ライブラリ

于 2013-02-07T00:50:30.810 に答える