Найти простые числа без проверки делителей - C (СИ)
Формулировка задачи:
Помогите, пожалуйста, немного улучшить код. Вся проблема в том что i считает кол-во делителей. Оно вроде там и не надо совсем, но без него не получается...
Помогите пожалуйста убрать i, а также подскажите, почему не работает вот это num < 3 ? num++ : num+=2 Можно вместо этого поставить просто num+=2 но тогда из ряда вылетит двойка которая тоже есть простым числом. Заранее спасибо.
#include <stdio.h> #include <math.h> int main() { //num - число, div - делитель, i - количество делителей. int num, div, i = 0; for(num = 1; num <= 50; num < 3 ? num++ : num+=2) { for(div = 2;div <= sqrt(num*1.0); div++) { if(num % div); else i++; } if (i == 0) printf("%d - prime\n", num); i = 0; } }
Решение задачи: «Найти простые числа без проверки делителей»
textual
Листинг программы
#include <stdio.h> #include <stdbool.h> //Для "приятно читаемого bool" bool isprime (int number) { if (number != 2 && (number % 2) == 0 || number < 2) return false; else { int div; for (div = 3; div * div <= number; div += 2) if ( (number % div) == 0) return false; } return true; } #define FINAL_NUMBER 100 int main (void) { int num = 0; while(num++ < FINAL_NUMBER) if (isprime(num)) printf("%-5d\tis prime\n", num); return 0; }
Объяснение кода листинга программы
- Включаем необходимые заголовочные файлы для работы с функциями ввода-вывода и булевыми значениями.
- Определяем функцию
isprime
, которая будет проверять является ли число простым. Входной параметр - целое числоnumber
. - Если число меньше или равно 2, либо делится на 2 без остатка, то оно не является простым и функция возвращает
false
. - В противном случае, инициализируем переменную
div
равной 3 и начинаем проверку делителей от 3 до квадратного корня из числа. - Если число делится на какое-либо из этих значений без остатка, то оно не является простым и функция возвращает
false
. - Если цикл завершается без возврата
false
, то число является простым и функция возвращаетtrue
. - В функции
main
определяем переменнуюnum
для хранения чисел, которые мы будем проверять на простоту. - Задаем максимальное значение
num
равным 100 и с помощью циклаwhile
проверяем каждое число от 2 до 100 на простоту, используя функциюisprime
. - Если число является простым, то выводим его на экран с помощью функции
printf
. - В конце функции
main
возвращаем 0, чтобы указать, что программа успешно завершилась.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д