Требуется вычислить разложение натурального числа на простые множители - C (СИ)
Формулировка задачи:
Простите,что пишу сюда код на си,просто дождаться ответов в разделе "Си" невозможно:
Ошибка в цикле.В чём ошибка?
#include <stdio.h> #include <stdlib.h> #include <locale.h> int main(int argc, char *argv[]) { int j,r=1,i=0,ostatok,a=2,n,*d; setlocale(LC_ALL,"rus"); printf("Ââåäèòå Г*Г*ГІГіГ°Г*ëüГ*îå ÷èñëî: "); scanf("%d",&n); d=(int*)malloc(n*sizeof(int)); if (d==NULL) { printf("ГЋГёГЁГЎГЄГ*! ÍåäîñòГ*òî÷Г*Г® ГЇГ*ìÿòè äëÿ âûäåëåГ*ГЁГї ГҐВё äëÿ Г¬Г*Г±Г±ГЁГўГ*"); system("PAUSE"); return 1; } while (r!=n) { if (n%a!=0) a++; else { d[i]=a; i++; } r=1; for (j=0;j<n;j++) r=d[j]*r; } system("PAUSE"); return 0; }
Решение задачи: «Требуется вычислить разложение натурального числа на простые множители»
textual
Листинг программы
#include <stdio.h> #include <conio.h> #include <stdlib.h> int IsSimple(int n) { int i; for(i=2;i*i<=n;i++) if(n%i==0) return 0; return 1; } int main() { int j,r=1,i=0,a=2,n,*d; printf("Enter number:"); scanf("%d",&n); d=(int*)malloc(n*sizeof(int)); if (d==NULL) { printf("Memory allocation error"); getch(); return 1; } r=n; while (r>1) { if( r%a==0 && (IsSimple(a) || r==a) ) { r/=a; d[i++]=a; a=1; } a++; } for (j=0;j<i;j++) printf("%d ",d[j]); puts(""); free(d); getch(); return 0; }
Объяснение кода листинга программы
Код предназначается для вычисления разложения натурального числа на простые множители. Он использует функцию IsSimple
, которая проверяет, является ли число простым, и основной цикл, который выполняет разложение числа на простые множители.
Вот список действий, которые происходят в коде:
- Ввод числа с клавиатуры.
- Выделение памяти под массив
d
с помощьюmalloc
. - Проверка успешности выделения памяти. Если память не может быть выделена, выводится сообщение об ошибке и программа завершается.
- Инициализация переменных:
r
устанавливается равнымn
,i
устанавливается равным 0,a
устанавливается равным 2. - Цикл
while
начинается, гдеr
уменьшается на единицу до тех пор, покаr
больше 1. - Внутри цикла проверяется, делится ли
r
наa
без остатка, и при этомa
является простым числом или равноr
. - Если условие выполняется, то
r
делится наa
,a
устанавливается равным 1,d[i++]
присваивается значениеa
, иa
увеличивается на единицу. - После завершения цикла, происходит вывод простых множителей числа
n
в порядке их появления. - Вызов функции
free
для освобождения памяти, выделенной под массивd
. - Программа завершается.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д