试图项目欧拉三

时间:2013-10-24 08:59:13

标签: c++ variables factors

我想打开说我还不是很擅长编程,而且可能有更好的方法来做我想做的事情。如果看到那些如此肆无忌惮的事情会让你烦恼,那就继续吧。

我一直在为Euler项目提出第三个问题,即“找到最大的主要因素600851475143”。首先,我做了一些计算数字因子的东西。 (请原谅这些名字,我什么都想不到。)

#include <iostream>

using namespace std;

void Factor (double dFactorer)
{
    long dUpperlimit;
    dUpperlimit = (int)dFactorer/2;
    float fnumTouse;
    fnumTouse = 1;
    int nCounter;
    nCounter = 0;
    while (fnumTouse <= dUpperlimit)
    {
        if ((long)dFactorer % (long)fnumTouse == 0)
        {
            cout << fnumTouse << endl;
            fnumTouse++;
            nCounter++;
        }
        else
        {
            fnumTouse++;
        }
    }
    cout << dFactorer << endl;
    cout << "There are " << nCounter + 1 << " factors in this number";
}

int main()
{
    double dNumtofac;
    cout << "Enter a number to factor: ";
    cin >> dNumtofac;
    cout << endl;
    Factor (dNumtofac);
    return 0;
}

好吧,所以,我知道这是一个非常粗暴的工作,我必须做的所有演员才能让某些事情发挥作用。它适用于较小的数字,但是在1亿左右的任何数字都会使它在完全停止之前仅输出一定数量的因子。我尝试了问题编号,它的输出是数字本身,说这个600851475143中只有一个因素。我想知道它为什么说这个,是否与我使用的变量限制有关?别的什么?我没有足够的知识来解决这个问题。

1 个答案:

答案 0 :(得分:0)

#include <iostream>

using namespace std;

int main()
{
long long n=0;
//to do: verify that the number is positive and below the limit of long long
cout <<"The number to factor : ";
cin  >>n;
long long aux = n%2==0 ? 2 : 1;
for (long long i=3;i<=n/2;i+=2)
    if(n%i==0)
         aux = aux>n/i ? aux : n/i;
cout<<"Greatest factor = "<<aux;
return 0;
}

当然,你可以通过使for从高到低并在第一次出现因子时停止来大大改善这一点。不要忘记验证n / 2是奇数还是偶数。 (没有测试代码)。