Найти простые числа без проверки делителей - 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;
}

Объяснение кода листинга программы

  1. Включаем необходимые заголовочные файлы для работы с функциями ввода-вывода и булевыми значениями.
  2. Определяем функцию isprime, которая будет проверять является ли число простым. Входной параметр - целое число number.
  3. Если число меньше или равно 2, либо делится на 2 без остатка, то оно не является простым и функция возвращает false.
  4. В противном случае, инициализируем переменную div равной 3 и начинаем проверку делителей от 3 до квадратного корня из числа.
  5. Если число делится на какое-либо из этих значений без остатка, то оно не является простым и функция возвращает false.
  6. Если цикл завершается без возврата false, то число является простым и функция возвращает true.
  7. В функции main определяем переменную num для хранения чисел, которые мы будем проверять на простоту.
  8. Задаем максимальное значение num равным 100 и с помощью цикла while проверяем каждое число от 2 до 100 на простоту, используя функцию isprime.
  9. Если число является простым, то выводим его на экран с помощью функции printf.
  10. В конце функции main возвращаем 0, чтобы указать, что программа успешно завершилась.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 4.455 из 5
Похожие ответы