簡體   English   中英

有沒有一種聰明的方法在 C++ 中使用大數

[英]Is there a smart way to use large numbers in C++

由於大學關閉,所有考試都因電暈而取消,我開始用 C++ 編寫質因數分解算法。 有沒有辦法使用比unsigned long long int更大的數字? 但我必須能夠通過終端輸入數字並用它計算。

到目前為止,這是我的代碼:

#include <iostream>
#include <bits/stdc++.h>
unsigned long long int number = 1;
int main(int argc, char **argv)
{
    while(1){
        std::cout << "Please enter a number: ";
            unsigned long long int counter = 2;
            unsigned long long int root = 1;
            int err = scanf("%llu",&number);
            if(err != 1){
                number = 1;
                std::cerr << "NOPE" << std::endl;
                return 1;
            }else{
            std::cout << "Prime factors of  " << number << " are: "<<  std::endl;
            if(number < 2){
                number = 1;
                root = 1;
            }else{
                root = sqrt(number);
            }
            while(number != 1){
                // If number % counter == 0, counter must be a prime factor!
                if(number % counter == 0){
                    number = number / counter;
                    root = sqrt(number);
                    std::cout << counter <<  std::endl;
                // If number is smaller than root it must be the last prim factor!  
                }else if(number < root || number < counter){
                    std::cout << number <<  std::endl;
                    break;
                }else{
                    counter++;
                }
            }
        }
    }
    return 0;
}

也許提升多精度庫?

GMP 是一個非常高性能的庫,用於 C 中的任意精度整數數學運算,也可以在 C++ 中使用。 有一個字符串轉換函數,它允許您接受來自終端或其他字符串源的輸入。

https://gmplib.org/

Stack Overflow 上也已經存在關於使用 GMP 進行素數分解的問題:)

嗨,如果你想理解並創建一個好的代碼來做這些事情,你必須學習一個非常重要的數學主題“數論”。 一本好書可能是卡夫,華盛頓的 檢查並學習,你會發現由於基礎表示和數論,一些微積分會更有效和更容易。

暫無
暫無

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

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