Сформировать массив из всех делителей числа, которые являются простыми числами - C (СИ)

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

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

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

Решение задачи: «Сформировать массив из всех делителей числа, которые являются простыми числами»

textual
Листинг программы
#include    <stdio.h>
#include    <stdlib.h>
void    main()
{
  unsigned long nk,nkm;
  unsigned long npfj;
  unsigned long *npf;unsigned int   qpf;
  unsigned int  jt;
  int   ifi;
 
  printf("Unsigned Number:");
  scanf("%ld",&nk);
 
  for(jt=0;jt<2;jt++)
  {
    if(jt==1)
      npf=(unsigned long*)malloc((qpf+1)*sizeof(long));
 
    nkm=nk;
    for(qpf=0;nkm>1;)
    {
      for(npfj=2,ifi=0;npfj<=nk/2;npfj++)
      {
        if(nkm%npfj==0)
        {
          ifi=1;
          if(jt==1)
            npf[qpf]=npfj;
          qpf++;
          nkm/=npfj;
          break;
        }
      }
      if(!ifi)
        break;
    }
  }
 
  if(qpf)
  {
    printf("Prime Factors:\n");
    for(jt=0;jt<qpf;jt++)
      printf("%ld\n",npf[jt]);
  }
  else
    printf("No prime factors\n");
 
  free(npf);
}

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

В этом коде постановка задачи следующая:

  1. Ввести целое число от пользователя.
  2. Создать массив для хранения простых делителей этого числа.
  3. Перебрать все числа от 2 до половины введенного числа.
  4. Проверить, делится ли введенное число на каждое из этих чисел без остатка.
  5. Если делится, то это простой делитель, и его можно добавить в массив.
  6. После перебора всех чисел, проверить, были ли найдены простые делители.
  7. Если были, то вывести их на экран.
  8. Освободить память, выделенную под массив простых делителей. Список действий в коде:
  9. Ввод числа от пользователя с помощью функции scanf.
  10. Выделение памяти под массив простых делителей с помощью функции malloc.
  11. Инициализация переменных: npf - указатель на начало массива простых делителей, qpf - количество простых делителей, nkm - текущее число для проверки на делимость, ifi - флаг, указывающий, был ли найден простой делитель.
  12. Основной цикл, который выполняется дважды. Второй раз массив простых делителей увеличивается в размере на 1.
  13. Внутренний цикл для перебора чисел от 2 до половины введенного числа.
  14. Внутренний цикл для проверки, делится ли текущее число на простое число без остатка.
  15. Если делится, то добавляем простое число в массив простых делителей и уменьшаем текущее число на это простое число.
  16. Если после перебора всех чисел не было найдено простых делителей, то выводим сообщение No prime factors.
  17. Если были найдены простые делители, то выводим их на экран.
  18. Освобождаем память, выделенную под массив простых делителей.

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


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

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

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