如何减少该程序的时间?

问题描述

我有一个像这样的程序:给定一个整数序列,找到最大的素数和它的正数。

示例:

input:

9 // how many numbers
19 7 81 33 17 4 19 21 13

output:
19 // the biggest prime
1 7 // and its positon

所以首先我得到输入,将其存储在一个数组中,制作该数组的副本并对其进行排序(因为我使用了一个变量来跟踪最高级的素数,如果未排序则会发生疯狂的事情)用该数组的每个数字检查它是否为素数,再次遍历该数组以得到正数并打印结果。

但是时间太慢了,我可以改善吗?

我的代码:

#include <iostream>
#include <cmath>
#include <algorithm>

using namespace std;
int main() 
{
    int n;
    cin >> n;
    int numbersNotSorted[n];
    int maxNum{0};
    for (int i = 0; i < n; i++)
    {
        cin >> numbersNotSorted[i];
    }
    int numbersSorted[n];
    for (int i = 0; i < n; i++)
    {
        numbersSorted[i] = numbersNotSorted[i];
    }
    sort(numbersSorted,numbersSorted + n);
    for (int number = 0; number < n; number++)
    {
        int countNum{0};
        for (int i = 2; i <= sqrt(numbersSorted[number]); i++)
        {
            if (numbersSorted[number] % i == 0)
                countNum++;
        }
        if (countNum == 0)
        {
            maxNum = numbersSorted[number];
        }
    }
    cout << maxNum << '\n';
    for (int i = 0; i < n; i++)
    {
        if (numbersNotSorted[i] == maxNum)
            cout << i + 1 << ' ';
    }
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)