如何为任何值编码欧拉 #3
How to code Euler #3 for any value?
/*
The prime factors of 13195 are 5, 7, 13 and 29.
What is the largest prime factor of the number 600851475143 ?
*/
#include <iostream>
#include <string>
#include <cmath>
using namespace std;
int main()
{
unsigned long num = 600851475143;
unsigned long i;
long double root = sqrt(num);
long double tempRoot = 0;
unsigned long factor = 0;
unsigned long largest = 0;
for (i=2; i<root; i++)
{
if (num%i == 0)
{
num = num/i;
factor = i;
cout << factor << endl;
if (factor > largest)
{
largest = factor;
}
}
}
cout << largest << endl;
return 0;
}
这个解决方案之所以有效,是因为巧合的是,600851475143的因子都是质数。但是在调试代码时,我为变量 num (=600851475143) 输入了各种值。例如,当我输入 135 时,它向我显示了所有因子,包括非素数因子。如何为因子添加质数检查器?我尝试使用与此处在嵌套 if 中使用的相同方法,但惨遭失败。任何帮助将不胜感激。
另外,请指出我是否在某些变量的情况下使用了不必要的大变量类型。
谢谢。
您不必进行素数检查。在分解时,只需确保继续划分候选人,直到它不再除以数字。这在代码中很容易做到:只需将if (num%i == 0)
更改为 while (num%i == 0)
即可。
相关文章:
- std::map 保存任何值类型
- C++ 矢量未显示我插入的任何值
- 为什么我的变量在我尚未将其设置为任何值时返回一个值?
- 如何将任何值转换为对象并使用 boost::p roperty_tree json 添加成员
- 为什么null std ::可选的被认为小于任何值,而不是更多
- 检查数组中的任何值是否等于添加到数组的当前值
- 如何将任何值转换为字节数组并将其附加到字节列表
- stbi_load不返回任何值
- 带有 std::的任何值unordered_map不能any_cast字符串
- 使用 Arduino 将位置编码器值转换为 RPM 时出现问题
- 为什么我的程序一直给我堆缓冲区溢出,即使我没有超出数组的界限或覆盖任何值
- 如何使用difference_type按任何值增加/减少reverse_iterator
- c++:何时初始化声明的变量而不将其分配给任何值
- 存储任何值和特定类范围的值
- mpi_scatterv不将任何值返回到recvbuf
- getline 没有为字符串对象分配任何值
- 如何为任何值编码欧拉 #3
- CORBA::String_var -> 我无法为这种类型的类字段分配任何值
- 我的变量不会有任何值
- 如何读取可以是任何值的整数,除非它是 0,它不在文件中