Найти простые числа без проверки делителей - 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, чтобы указать, что программа успешно завершилась.