递归FUNC找质因数 [英] recursive func to find prime factors

查看:129
本文介绍了递归FUNC找质因数的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我犯了一个递归函数找到一个数的质因子,但它具有使Turbo C的退出的错误。请大家帮忙

 #包括LT&;&stdio.h中GT;
#包括LT&;&CONIO.H GT;
INT素(INT NUM);
INT primefactor(INT NUM,INT I);
无效的主要(无效)
{
    INT NUM;
    的printf(请输入一个数字,其主要因素是计算:);
    scanf函数(%D,试验#);
    primefactor(NUM,I);
     I = NUM
    残培();
}
INT primefactor(INT NUM,int i)以
{
    如果(ⅰ== 2)
    返回1;
    如果(NUM%我== 0)
    {
        如果(素(NUM))
        {
            的printf(%d个,NUM);
            NUM = NUM​​ / I;
            我++;
        }
    }
    一世 - ;
    primefactor(NUM,I);
    返回0;
}
INT素(INT NUM)
{
    INT I,标志;
    对于(i = 2; I<民;我++)
    {
        如果(NUM%我== 0)
    标志= 0;
    }
    返回标志;
}


解决方案

(有点太困了,要写出好的code ..所以很抱歉提前任何错误:P)

一个简单的非递归版本

  printPrimeFactors(INT NUM){  为(ⅰ= 2; I&下; SQRT(NUM); I = getNextPrime()){
     如果(NUM%I)
        的printf(%D,我);
  }}

如果你必须使用递归

  printPrimeFactors(INT NUM){ 如果(isPrime(NUM)){
    的printf(%D,NUM);
 }其他{
    对于(i = 2; I<开方(NUM);我++){
        如果(NUM%我== 0){
              printPrimeFactors(ⅰ);
              printPrimeFactors(NUM / I);
        }
    }
 }}

i made a recursive function to find the prime factors of a number but it has a bug which makes turbo c quit. please help

#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;
}

解决方案

(little too sleepy to write good code.. so am sorry in advance for any bugs :p )

a simpler non recursive version

printPrimeFactors(int num) {

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

}

if you have to use recursion

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

}

这篇关于递归FUNC找质因数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆