@dmitrii000

Что не так в решении задачи?

Вот условие
6663fc016d7f8747845101.png
Вот решение, но вместо 104743 оно выводит 30001, что не так?
#include <iostream>
#include <vector>

int main() {
    std::vector<int> primeNums(10001);

    int n = 0;
    int index = 0;

    while (primeNums[primeNums.size() - 1] == 0) {
        ++n;
        if ((n * n) % 24 == 1) {
            primeNums[index] = n;
            ++index;
        }
    }

    std::cout << primeNums[primeNums.size() - 1];

    return 0;
}
  • Вопрос задан
  • 124 просмотра
Решения вопроса 3
(n * n) % 24 == 1
Что-то я не видал такого метода определения прайма. Числа 2 и 3 он не считает праймами, наверняка, и дальше есть расхождения.

P.S. Зачем тут вообще массив...
Ответ написан
wataru
@wataru Куратор тега C++
Разработчик на С++, экс-олимпиадник.
Проверка числа на простоту не так.
Во-первых, начинайте c n=2, ибо 1 у вас иначе простым числом будет.

Во-вторых, в вашем случае надо проверять, что n не делится на все предыдущие простые числа. Вложенным циклом. Ну, или решето эратосфена реализуйте.
Ответ написан
Комментировать
@WAR_VIK
Вот так можно написать:
#include <iostream>

bool is_prime(int n) {
    for (int i = 2; i <= n / 2; i++) {
        if (n % i == 0) return false;
    }
    return true;
}

int main()
{
    int count = 10001, prime = 0, res = 0;
    for(int i = 2; i < 1000000; ++i) {
        if(is_prime(i)) ++prime;
        if(count == prime) {
            res = i;
            break;
        }
    }
    std::cout << res;
    return 0;
}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы