当前位置: 代码迷 >> C语言 >> 把任意可以分解的数分为不同的素数之和(不好分得会提示)----递归实现
  详细解决方案

把任意可以分解的数分为不同的素数之和(不好分得会提示)----递归实现

热度:138   发布时间:2008-04-12 13:36:37.0
是啊..哪个需要回归到2,再从2往下找..当找到时纪录个数...在输出结果..那就很麻烦了....呵呵..燕子你的代码很好,让我有种看大师写的代码感觉...
----------------解决方案--------------------------------------------------------
汗。。。。。。偶是菜鸟。。。。。又被BS了。。。


----------------解决方案--------------------------------------------------------
稍微改了一下
#include "stdio.h"
#include"stdlib.h"
int b[1000]={1};
int j;
int b1;
int rem=1;
int m=0;
int pn()
{   int flag;
    if(j>0&&rem)
        b[j]=b[j-1];
    rem=1;
    b[j]=b[j]+1;
    do
    {   flag=0;
        int flag1=0;
        for(int i=1;i<=b[j];i++)
            if(b[j]%i==0)
            {
                if(++flag1==3)
                    flag=1;   
            }
    }while(b[j]++&&flag);
       b[j]=b[j]-1;
    return b[j];
}

int reduce(int s,int n)
{   
    if(s>0)
    {
      n=pn();
      j++;
    }
    if(s==0)
        return 1;
    if(s<0)
    {
        j=j-2;
        rem=0;
        return 0;
    }
     if(s>b1||b[j]>b1)
        {
         printf("没有结果!");
         exit(0);
        }
    if(reduce(s-n,n))
        {
          return 1;
        }
   
    return(reduce(s+b[j],b[j]));
}

int main()
{  
    scanf("%d",&b1);
    while(b[0]<b1)
    {
    j=0;
    if(reduce(b1,b[0]))

    {   if(m<j)
        {
            for(int i=0;i<j;i++)
                printf("%d  ",b[i]);
            m=j;
            printf("\n");
        }
        
    }
    
    }
    return 0;
}
----------------解决方案--------------------------------------------------------
原本想把改成可以分解成所有不同素数组合得..太长了..所以可以稳定输出最长素数组合..其它也输出间或的组合..属于不稳定的方法...可以看看就好..代码风格很糟糕..
----------------解决方案--------------------------------------------------------
by 雨中飞燕 C/C++学习群(TC勿进)

什么么   呵呵C/C++ 只是编程语言而已 编程  还是 编程思想最有意思

C的 一些底层 数据 算法也比较不错  

再说了 现在大学学C有几个不是 TC的
----------------解决方案--------------------------------------------------------
  相关解决方案