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

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

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

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

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

textual
Листинг программы
  1. #include <stdio.h>
  2.  
  3. int is_pair_bin(unsigned n, char* s){
  4.     unsigned k, i, p;
  5.     char*    q, c, *t = s;
  6.  
  7.     p = (n & 1) + ((n >> 1) & 1);
  8.     if(p != 0)
  9.         return 0;
  10.  
  11.     s[0] = s[1] = '0';
  12.     s   += 2;
  13.  
  14.     for(i = 0, n >>= 2; n != 0; n >>= 2){
  15.         k = (n & 1) + ((n >> 1) & 1);
  16.         if((k == 1) || (k == p))
  17.             return 0;
  18.  
  19.         s[0] = s[1] = (k == 2) ? '1' : '0';
  20.         s   += 2;
  21.         p    = k;
  22.         ++i;
  23.     }
  24.  
  25.     if(i > 0){
  26.         for(*s-- = '\0', q = t; s > q; ++q, --s){
  27.             c  = *s;
  28.             *s = *q;
  29.             *q = c;
  30.         }      
  31.     }
  32.     return (i > 0);
  33. }
  34.  
  35. int main(void){
  36.     char     b[(sizeof(unsigned) << 3) + 1];
  37.     unsigned i, m = 0xFFFFFA;
  38.  
  39.     for(i = 0; i <= m; ++i){
  40.         if(is_pair_bin(i, b))
  41.             printf("%u - %s\n", i, b);
  42.     }
  43.     return 0;
  44. }

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

В этом коде реализована функция 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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы