samedi 17 octobre 2020

How to reduce the time in this program?

I have a program like this: given a sequence of integers, find the biggest prime and its positon.

Example:

input:

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

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

So first I get input, store it in an array, make a copy of that array and sort it(becuase I use a varible to keep track of the higest prime, and insane thing will happen if that was unsorted) work with every number of that array to check if it is prime, loop through agian to have the positon and print the result

But the time is too slow, can I improve it?

My code:

#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 << ' ';
    }
}

Aucun commentaire:

Enregistrer un commentaire