【问题标题】:How to find Largest Factor of a Number (other than itself) in c++如何在c ++中找到数字的最大因子(除了它本身)
【发布时间】:2020-08-16 07:55:21
【问题描述】:

我试图找到给定数字的最大因子,它很简单,但不知道为什么我的代码没有给出正确的输出:

#include<iostream>
#include<math.h>
#include <bits/stdc++.h>
using namespace std;
int lfactor(int a)
{
    int *p;
    int s=0;
     p=new int[a];
    int lf;
    for(int i=2;i<a;i++)
    {
        if(a%2==0)
        {
           lf=a/2;
           cout<<lf;
           return 0;
        }
        else
        {
            if(a%i==0)
            {
                
                p[s]=i;
                s++;
            }


        }
        }
        cout<<*max_element(p,p+a);

}

int main()
{
    int a;
    cout<<"Enter Number to calculate largest factor";
    cin>>a;
    lfactor(a);
}

这段代码给了我一些随机输出输入,它正在尝试 15689

【问题讨论】:

  • 任何给定数字的最大因素是数字本身,所以请重新表述您的问题!
  • 请解释我到底哪里错了
  • 因数成对出现,所以一旦找到最小的因数(称为 f1),将数字除以 f1,结果将是最大的因数。此外,您可能只想在循环外检查一次是否可被 2 整除。当你得到数字的平方根时,你也可以停止寻找因子。如果你在没有找到因子的情况下达到那个点,那么这个数字就是素数。回到成对出现的因子,因此每个大于平方根的因子都必须与一个小于平方根的因子配对。

标签: c++ pointers cmath


【解决方案1】:

您得到“随机”输出,因为您从未初始化 p 的内容。你应该做的是:

int *p = new int[a] {0}; // fill with zeros

你也永远不会删除这个数组,所以这是内存泄漏。你可以使用std::unique_ptr&lt;int[]&gt;,完全不用担心删除它。

也完全没有必要创建这个数组。由于您是从最小数字迭代到最大数字,因此您找到的最新因子也将是最大的。

for(int i = 2; i < a; i++)
{
    if (a % i == 0) {
        lf = i;
        s++;
    }
}

还有更多方法可以优化这一点。例如,如果您发现ia 的一个因子,您可以除以i 并开始一个迭代次数更少的新循环。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-01-13
    • 2011-04-17
    • 2017-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多