Вот код ниже, чтобы получить следующее простое число на основе ввода.Я также измеряю, сколько времени занимает наносекунда для завершения операции.
Я использую C ++ в Visual Studio 2017 (выпуск для сообщества).Мои результаты, полученные при вводе некоторых чисел, составляют от 300 наносекунд для небольших чисел (1-100) до 800 наносекунд (1 000 000 000 и выше).Однако, если я введу 65535, я получу 97767 наносекунд.Но когда я вводил 65533, это 438 наносекунд, а когда я вводил 65539, это 487 наносекунд.
Мой вопрос: почему 65535 требует больше времени для вычисления, но для другого числа выше или ниже его значительно меньше?
#include "stdafx.h"
#include <string>
#include <iostream>
#include <chrono>
bool isPrime(int num)
{
int divisor = 3;
while (divisor != INT_MAX)
{
if (divisor % 2 == 0)
{
divisor++;
}
if (num % divisor == 0)
{
return true;
}
divisor += 2;
}
return false;
}
int findNextPrime(int num)
{
while (num != INT_MAX)
{
if (num % 2 == 0)
{
num++;
}
else
{
num += 2;
}
if (isPrime(num))
{
return num;
}
else
{
num++;
}
}
return -1;
}
int main()
{
int candidatePrime;
std::string str;
std::cin >> candidatePrime;
const auto start = std::chrono::high_resolution_clock::now();
const int nextPrime = findNextPrime(candidatePrime);
const auto end = std::chrono::high_resolution_clock::now();
std::cout << nextPrime << std::endl;
std::cout << std::chrono::duration_cast<std::chrono::nanoseconds>(end - start).count()
<< " nanoseconds" << std::endl;
std::cin >> str;
return 0;
}