Требуется вычислить разложение натурального числа на простые множители - 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, которая проверяет, является ли число простым, и основной цикл, который выполняет разложение числа на простые множители. Вот список действий, которые происходят в коде:

  1. Ввод числа с клавиатуры.
  2. Выделение памяти под массив d с помощью malloc.
  3. Проверка успешности выделения памяти. Если память не может быть выделена, выводится сообщение об ошибке и программа завершается.
  4. Инициализация переменных: r устанавливается равным n, i устанавливается равным 0, a устанавливается равным 2.
  5. Цикл while начинается, где r уменьшается на единицу до тех пор, пока r больше 1.
  6. Внутри цикла проверяется, делится ли r на a без остатка, и при этом a является простым числом или равно r.
  7. Если условие выполняется, то r делится на a, a устанавливается равным 1, d[i++] присваивается значение a, и a увеличивается на единицу.
  8. После завершения цикла, происходит вывод простых множителей числа n в порядке их появления.
  9. Вызов функции free для освобождения памяти, выделенной под массив d.
  10. Программа завершается.

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


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

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

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