簡體   English   中英

尋找最大的質因數? (不能大量使用嗎?)

[英]Finding the largest prime factor? (Doesn't work in large number?)

我是C++的初學者,剛看完C++ Primer的第一章。 因此,我嘗試計算最大質因數的問題,我發現我的程序在大小為 10e9 的情況下運行良好,但在 eg600851475143 之后失敗,因為當我將任何大數輸入其中時,它總是返回一個有線數字 eg2147483647。 我知道類似的問題已經被問過很多次,我只是想知道為什么這會發生在我身上。 提前致謝。

PS 我想原因與我的程序的某些部分有關,該部分無法處理大量數據。

#include <iostream>

int main()
{
    int val = 0, temp = 0;
    std::cout << "Please enter: " << std::endl;
    std::cin >> val;
    for (int num = 0; num != 1; val = num){
        num = val/2;
        temp = val;
        while (val%num != 0)
            --num;
    }
    std::cout << temp << std::endl;
    return 0;
}

您的int類型是 32 位(就像在大多數系統上一樣)。 帶符號的 32 位二進制補碼值可以存儲的最大值是2 ** 31 - 1或 2147483647。如果您想知道定義類型限制的常量和/或使用更大的常量,請查看man limits.h類型(例如, unsigned基本上可以免費將范圍擴大一倍, stdint.h / inttypes.h中的uint64_t會將其擴展 84 億倍,並且僅在 32 位系統上花費一些有意義的東西)。

2147483647不是有線號碼,它的INT_MAXclimits header 文件中定義。 當您達到int的最大容量時,就會發生這種情況。

為此,您可以使用更大的數據類型,例如std::size_tunsigned long long int ,它們的最大值為18446744073709551615

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM