reportar programa primos para número numeros los factores entero descomposición descomposicion descomponer desarrollar c recursion

programa - descomposición de factores primos del 1 al 100



func recursivo para encontrar factores primos (9)

Hice una función recursiva para encontrar los factores primos de un número, pero tiene un error que hace que se cierre el turbo c. por favor ayuda

#include<stdio.h> #include<conio.h> int prime(int num); int primefactor(int num,int i); void main(void) { int num; printf("Enter a number whose prime factors are to be calculated:"); scanf("%d",&num); primefactor(num,i); i=num getch(); } int primefactor(int num,int i) { if(i==2) return 1; if(num%i==0) { if(prime(num)) { printf(",%d",num); num=num/i; i++; } } i--; primefactor(num,i); return 0; } int prime(int num) { int i,flag; for(i=2;i<num;i++) { if(num%i==0) flag=0; } return flag; }


(Poco soñoliento para escribir un buen código ... así que lo siento de antemano por cualquier error: p)

una versión no recursiva más simple

printPrimeFactors(int num) { for (i = 2; i < sqrt(num); i=getNextPrime()) { if (num %i) printf("%d", i); } }

si tiene que usar recursión

printPrimeFactors(int num) { if(isPrime(num)) { printf ("%d ", num); } else { for(i=2; i < sqrt(num); i++) { if(num%i ==0) { printPrimeFactors(i); printPrimeFactors(num/i); } } } }


De acuerdo con IVlad: también, ¿qué sucede en el caso en que num es primo? ¿Cuántas veces se llamará a la función recursiva, por ejemplo, num = 7?


Hice esto en C. Dependiendo del compilador, pueden ser necesarios cambios menores en el programa.

#include<stdio.h> int primefact(int); int main() { int n; printf("Enter a number whose prime factors are to be calculated : /n"); scanf_s("%d", &n); printf("Prime factors of %d are : "); primefact(n); printf("/n"); return 0; } int primefact(int n) { int i=2; while(n%i!=0) i++; printf("%d ", i); if(n==i) return 0; else primefact(n/i); }


Implementación en java ...

public class PrimeFactor { public int divisor=2; void printPrimeFactors(int num) { if(num == 1) return; if(num%divisor!=0) { while(num%divisor!=0) ++divisor; } if(num%divisor==0){ System.out.println(divisor); printPrimeFactors(num/divisor); } } public static void main(String[] args) { PrimeFactor obj = new PrimeFactor(); obj.printPrimeFactors(90); } }


La mejor forma de implementar la factorización de primas con llamadas a funciones generales reducidas sería. . .

void factors(int number) { int divisor = 2; if (number == 1) { cout << "1"; return; } while ((number % divisor) && (number > divisor)) divisor++; cout << divisor << ", "; factors(number / divisor); }

El número de llamadas a la función (recursividad) es igual a la cantidad de factores primos, incluido 1.


Solución recursiva completa en c ++ (para las líneas c replace cout con printf):

void printPrimeFactors(int num) { static int divisor = 2; // 2 is the first prime number if ( num == 1 ) //if num = 1 we finished { divisor = 2; //restore divisor, so it''ll be ready for the next run return; } else if ( num % divisor == 0 ) //if num divided by divisor { cout << divisor << " "; //print divisor printPrimeFactors( num / divisor ); //call the function with num/divisor } else //if num not divided by divisor { divisor++; //increase divisor printPrimeFactors( num ); } }


#include<stdio.h> #include<stdlib.h> int ar[10]={0}; int i=0,j=2; void P(int n) { if(n<=1){ return ; } else{ if(n%j == 0){ printf("%d/t",j); n=n/j; } else{ j++; } P(n); } } int main(void) { int n; printf("Enter n = "); scanf("%d",&n); P(n); printf("/n"); return 0; }


// recursivePrime.cpp // Purpose: factor finding for an integer // Author: Ping-Sung Liao, Kaohsiung,TAIWAN // Date: 2017/02/02 // Version : 1.0 // Reference: // http://.com/questions/3221156/recursive-func-to-find-prime-factors #include<stdio.h> #include<stdlib.h> #include<math.h> int primefactor(int num,int i); int main(void) { int num, i; printf("Enter a number whose prime factors are to be calculated:"); scanf("%d",&num); i=int ( sqrt (num) ); primefactor(num,i); system("pause"); // instead of getch() } int primefactor(int num,int i) { printf("num %d i=%d/n", num, i); if (i==1) printf("prime found= %d/n", num); // prime appearing in he variuable num else if(num%i==0) { primefactor( int (num/i) , int ( sqrt(num/i) ) ); primefactor( i , int (sqrt ( i ) ) ); } else { i--; primefactor(num,i); } return 0; }


void main(void) { int num,i=num; // (*) printf("Enter a number whose prime factors are to be calculated:"); scanf("%d",&num); primefactor(num,i); getch(); }

¿Qué valor crees que tendré en (*) ?

No estoy seguro de cómo quieres que empiece, pero estoy bastante seguro de que no quieres que sea algo aleatorio. Si desea que comience con el valor de num , debe asignarle num después de leerlo:

void main(void) { int num,i; printf("Enter a number whose prime factors are to be calculated:"); scanf("%d",&num); i = num; // assignment goes here. primefactor(num,i); getch(); }