В качестве новичка я сделал программу, которая находит количество простых чисел (prime
), которые не превышают входное натуральное число (x
). Программа работает отлично (я думаю), но я хочу, чтобы она работала быстрее (для более высоких чисел). Возможно ли, и если да, то как?C оптимизация программы/увеличение скорости
#include <stdio.h>
int main() {
int x, i, j, flag = 1, prime = 0 ;
scanf("%d", &x);
for (i = 2; i <= x; i++) {
j = 2;
while (flag == 1 && j < i/2 + 1) {
if (i % j == 0) {
flag = 0;
}
j++;
}
if (flag == 1) {
prime++;
}
flag = 1;
}
printf("%d\n", prime);
return 0;
}
1: Найти лучший алгоритм. 2. Для вашего текущего алгоритма обратите внимание, что существует только одно четное простое. 3. Для вашего текущего алгоритма обратите внимание, что если вы не нашли делителя в первых числах 'sqrt (n)', 'n' является простым. – EOF
Составьте список или массив каждого числа, найденного до сих пор. Проверяйте их только как делители. Нет никакого смысла в тестировании, если '6' является делителем, если он уже прошел мимо' 2' и '3' в качестве делителей. –
Посмотрите на сито Эратосфена. На этом можно построить несколько более эффективный алгоритм. –