有没有一种在 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;
}

也许 boost multi-precision 图书馆?

GMP 是一个非常高性能的 C 语言任意精度整数数学库,它也可以在 C++ 中使用。有一个字符串转换函数,可以让您接受来自终端或其他字符串源的输入。

https://gmplib.org/

Stack Overflow 上也已经有关于使用 GMP 进行质因数分解的问题 exist:)

嗨,如果你想理解并创建一个好的代码来做这些事情,你必须学习一个非常重要的数学主题 "Number Theory"。一本好书可能是 Kraft,Washington's one。检查并学习,你会发现多亏了基础表示法和数论,一些微积分会更有效、更容易。