如何在C ++中找到数字的最大因数自身除外

问题描述

我试图找到给定数字的最大因数很简单,但是为什么我的代码没有给出正确的输出呢?

#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

解决方法

由于从未初始化p的内容,因此您将获得“随机”输出。您应该做的是这样:

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

您也永远不会删除此数组,因此会导致内存泄漏。您可以使用std::unique_ptr<int[]>,而不必担心完全删除它。

完全不必创建此数组。由于您是从最小的数字到最大的数字进行迭代,因此您发现的最新因素也将是最大的。

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

还有更多方法可以对此进行优化。例如,如果发现ii的因数,则可以除以a并以更少的迭代次数开始一个新循环。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...