有没有一种在 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++ 中使用。有一个字符串转换函数,可以让您接受来自终端或其他字符串源的输入。
Stack Overflow 上也已经有关于使用 GMP 进行质因数分解的问题 exist:)
嗨,如果你想理解并创建一个好的代码来做这些事情,你必须学习一个非常重要的数学主题 "Number Theory"。一本好书可能是 Kraft,Washington's one。检查并学习,你会发现多亏了基础表示法和数论,一些微积分会更有效、更容易。
自从大学关闭并且所有考试都因冠状病毒而取消后,我开始用 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++ 中使用。有一个字符串转换函数,可以让您接受来自终端或其他字符串源的输入。
Stack Overflow 上也已经有关于使用 GMP 进行质因数分解的问题 exist:)
嗨,如果你想理解并创建一个好的代码来做这些事情,你必须学习一个非常重要的数学主题 "Number Theory"。一本好书可能是 Kraft,Washington's one。检查并学习,你会发现多亏了基础表示法和数论,一些微积分会更有效、更容易。