Сформировать массив из всех делителей числа, которые являются простыми числами - 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); }
Объяснение кода листинга программы
В этом коде постановка задачи следующая:
- Ввести целое число от пользователя.
- Создать массив для хранения простых делителей этого числа.
- Перебрать все числа от 2 до половины введенного числа.
- Проверить, делится ли введенное число на каждое из этих чисел без остатка.
- Если делится, то это простой делитель, и его можно добавить в массив.
- После перебора всех чисел, проверить, были ли найдены простые делители.
- Если были, то вывести их на экран.
- Освободить память, выделенную под массив простых делителей. Список действий в коде:
- Ввод числа от пользователя с помощью функции scanf.
- Выделение памяти под массив простых делителей с помощью функции malloc.
- Инициализация переменных: npf - указатель на начало массива простых делителей, qpf - количество простых делителей, nkm - текущее число для проверки на делимость, ifi - флаг, указывающий, был ли найден простой делитель.
- Основной цикл, который выполняется дважды. Второй раз массив простых делителей увеличивается в размере на 1.
- Внутренний цикл для перебора чисел от 2 до половины введенного числа.
- Внутренний цикл для проверки, делится ли текущее число на простое число без остатка.
- Если делится, то добавляем простое число в массив простых делителей и уменьшаем текущее число на это простое число.
- Если после перебора всех чисел не было найдено простых делителей, то выводим сообщение
No prime factors
. - Если были найдены простые делители, то выводим их на экран.
- Освобождаем память, выделенную под массив простых делителей.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д