Найти все натуральные числа, не превосходящие заданного m - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Всем добрый день, кто может помочь как можно реализовать данную задачу на С? Уже долго мучаюсь с ней, никак не получается (заранее спасибо): Найти все натуральные числа, не превосходящие заданного m, двоичная запись которых представляет собой последовательность пар нулей и единиц (например: 11001100). Показать десятичную и двоичную запись этих чисел.

Решение задачи: «Найти все натуральные числа, не превосходящие заданного m»

textual
Листинг программы
#include <stdio.h>
 
int is_pair_bin(unsigned n, char* s){
    unsigned k, i, p;
    char*    q, c, *t = s;
 
    p = (n & 1) + ((n >> 1) & 1);
    if(p != 0)
        return 0;
 
    s[0] = s[1] = '0';
    s   += 2;
 
    for(i = 0, n >>= 2; n != 0; n >>= 2){
        k = (n & 1) + ((n >> 1) & 1);
        if((k == 1) || (k == p))
            return 0;
 
        s[0] = s[1] = (k == 2) ? '1' : '0';
        s   += 2;
        p    = k;
        ++i;
    }
 
    if(i > 0){
        for(*s-- = '\0', q = t; s > q; ++q, --s){
            c  = *s;
            *s = *q;
            *q = c;
        }       
    }
    return (i > 0);
}
 
int main(void){
    char     b[(sizeof(unsigned) << 3) + 1];
    unsigned i, m = 0xFFFFFA;
 
    for(i = 0; i <= m; ++i){
        if(is_pair_bin(i, b))
            printf("%u - %s\n", i, b);
    }
    return 0;
}

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

В этом коде реализована функция is_pair_bin, которая проверяет, является ли число i простым (т.е. не имеет делителей, кроме 1 и самого себя). Для этого используется алгоритм решета Эратосфена. Алгоритм решета Эратосфена работает следующим образом:

  1. Создается список чисел, начиная с 2.
  2. Для каждого числа в списке:
    • Если число не отмечено как составное (т.е. не кратно ни одному из предыдущих отмеченных чисел), то оно помечается как простое и все его кратные числа помечаются как составные.
    • Если число отмечено как составное, то все его кратные числа помечаются как составные.
  3. Простые числа - это все числа, которые не помечены как составные. В коде функции is_pair_bin число i рассматривается как двоичное представление числа. Алгоритм решета Эратосфена применяется к этому двоичному представлению, чтобы определить, является ли число i простым. В функции main создается массив b, который будет использоваться для хранения двоичного представления чисел. Затем перебираются все числа от 0 до m (включительно), и для каждого числа проверяется, является ли оно простым с помощью функции is_pair_bin. Если число является простым, оно выводится на экран вместе с его двоичным представлением. Таким образом, код выполняет следующие задачи:
  4. Реализует функцию is_pair_bin для проверки простоты чисел.
  5. Создает массив b для хранения двоичного представления чисел.
  6. Перебирает все числа от 0 до m (включительно) и проверяет их простоту с помощью функции is_pair_bin.
  7. Выводит на экран все простые числа вместе с их двоичным представлением.

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


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

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

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