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();
}