Как упростить программу?

172
01 мая 2018, 01:35

Написал на C++ программу которая при вводе числа (от 0 до 1010), выводит 1, если это число простое, и 0, если оно составное. Функцию IsPrime реализовать надо было обязательно.

Программа работает, но проблема в том, что в 2 из 9 тестов нарушает предел времени 1 секунду. Как упростить программу, чтобы она не нарушала предел времени?

Код прилагаю:

#include <iostream>
using namespace std;
bool IsPrime(long long a)
{
    bool z=1;
    int i;
    bool isPrimess = true;
    i=2;
    while(i <= a / 2)
    {
        if(a % i == 0)
        {
          isPrimess = false;
          break;
        }
       i++;
    }
    if (!isPrimess){z=0;
                    return z;}
}
int main()
{
    long long int a;
    cin>>a;
    if(a==0 || a==1)
    {
        cout<<"0"<<endl;
    }
    else{
    cout<<IsPrime(a)<<endl;
    }
    return 0;
}
Answer 1

Вот такой тупой вариант должен вложиться в нужное время:

bool IsPrime(int num)
{
    if (num < 2) return false;
    if (num == 2) return true;
    if (num%2 == 0) return false;
    for (int i = 3; i*i <= num; i+=2)
    {
        if (num % i == 0) return false;
    }
    return true;
}

А вообще - здесь столько раз разбиралась эта и похожие задачи, что не найти просто сложно... Например , вот по такому запросу.

Answer 2

Простые модификации - ограничить диапазон проверки корнем из числа и проверять только делители вида 6*k-1 и 6*k-1 (конечно, помимо 2 и 3).

Более эффективные алгоритмы потребуют уже применения более серьезной математики

И неужели тест на время должна проходить программа с проверкой простоты одного числа?

READ ALSO
Множественное наследование C++ помогите))

Множественное наследование C++ помогите))

Описать два базовых класса с защищен переменной типа char (в Первом - фамилия, в другом - им "я)В Первому из них описать функцию записи фамилии...

227
Интерфейс шаблонов

Интерфейс шаблонов

Что Скотт Майерс подразумевает под "Интерфейсами шаблонов" в своей книге "Эффективное использование C++55 верных советов улучшить структуру...

205
Ускорение времени компиляции С++ кода при уменьшении включений

Ускорение времени компиляции С++ кода при уменьшении включений

Говорят, что удаление ненужных включений ускоряет сборку проектаЯ решил проверить это на простом примере

173