【发布时间】:2020-03-17 16:46:07
【问题描述】:
由于大学关闭并且所有考试都因电晕而取消,我开始用 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;
}
【问题讨论】:
-
如果你设法找到一个比 O(N) 更好的算法,那么大学将改名以纪念你。
-
查看作为 Boost 发行版一部分的大量库。学习如何使用 Boost 对您的市场价值很有帮助。这是一个陡峭的学习曲线。
-
正确方法:获取一个处理任意大小数字的大型整数库。聪明的方法:python(特别说明:我故意将python用于大规模算法或整数数学问题,因为如果性能成为问题,我知道我已经走错了路。他们都是为了更聪明地工作,而不是更努力.)
标签: c++ prime-factoring