论文网
English Papers
万事OK网
发表论文
 
 首页 > IT文章 > 程序设计 >
整数分解算法

[科技论文网] http://www.scipapers.com    2007-12-01  

    整数分解算法

    作者:forevertraveller

     1. if the number can be divided into smaller repeatable numbers,
    for number 6:
    6
    5+1
    4+2  4+1+1
    3+3 3+2+1 3+1+1+1
    ......

    Algorithm:
    public int split(int n,int m)
        {
            if (n<1 || m<1)
            {
                return 0;
            }
            if (n==1 | m==1)
            {
                return 1;
            }
            if(n<m)
            {
                return split(n,n);
            }
            if (n==m)
            {
                return split(n,m-1)+1;
            }
            return split(n,m-1)+split(n-m,m);
        }

    If you'd like to print every possibilities:
        int[] map=new int[n];
        private void print(int len)
        {
            if (len ==0)
            {
                return;
            }
            StringBuffer str=new StringBuffer(2*len);
            for (int i=0;i<len-1 ;i++ )
            {
                str.append(map[i]+"+");
            }
            str.append(map[len-1]);
            System.out.println(str.toString());
        }

        public int splitAndPrint(int n,int m,int len)
        {
            if (n == 0 && m == 1 )
            {
                print(len);
                return 1;
            }
            else if ( n == 1 && m > 1)
            {
                map[len]=1;
                print(len+1);
                return 1;
            }
            else if (n >= 1 && m == 1)
            {
                map[len]=1;
                splitAndPrint(n-1,m,len+1);
                return 1;
            }
            else if(n<m)
            {
                    return splitAndPrint(n,n,len);
            }
            else if (n==m)
            {
                map[len]=m;
                print(len+1);
                return splitAndPrint(n,m-1,len)+1;
            }
           
                map[len]=m;
                int s1=splitAndPrint(n-m,m,len+1);

                int s2=splitAndPrint(n,m-1,len);
                return s1+s2;
           
        }

    2. if the divided numbers must be not repeatable:
    5+1
    4+2
     3+2+1
    Algorithm:
    long map=new long[n];
        public long split2AndPrint(long n,long m,int len)
        {
            if(n==1 || n==2 )
            {
                return 0;
            }

            long s=0;

            for (long i=n-1; i>= 1; i--)
            {
                if(i>=m)
                    continue;
                // can be optimized further
                if(i*(i+1)<2*n)
                    break;

                map[len]=i;

                long min=m;
                if(min>i) min=i;
                if(min>(n-i)) min=n-i;

                if((n-i)<i){
                    s++;
                    map[len+1]=n-i;
                    //print(len+2);               
                }
                long s1= 0;

                Object obj= null;
                if( (obj=cache.get(""+(n-i)+","+min))==null)
                {
                    s1= split2AndPrint(n-i,min,len+1);
                    cache.put(""+(n-i)+","+min,new Long(s1));
                }
                else
                {
                    s1=((Long)obj).longValue();
                    System.out.println("hit:"+(n-i)+" "+min);
                }
                //System.out.println(""+(n-i)+" "+min);
                s += s1;
            }
            return s;
        }

        来源:

声明:本文由网友推荐或作者提交,版权归原作者所有,刊登此文仅为传播知识,展示研究成果,提高文章引用率。未经原作者授权,禁止用于任何形式的商业行为。科技论文网倡导尊重知识、尊重劳动、保护原创、知识共享。由于部分论文文章来于网络,文章作者不祥,请相关的原创作者与我们联系,以便加上您的署名。

  
整数分解算法
下面没有链接了     双核CPU上的快速排序效率
最新论文
·[程序设计]整数分解算法
·[程序设计]双核CPU上的快速排序效率
·[程序设计]经典的图论算法C++描述
·[程序设计]常用算法—贪婪法
·[程序设计]20世纪10个最伟大的算法
·[程序设计]任意阶奇数幻方C程序
·[程序设计]二叉查找树示例
·[程序设计]朴素(Naive)字符串匹配算法
·[程序设计]平衡二叉树源码
·[程序设计]随机算法求圆周率演示程序源代码
 
 

搜索论文

Google
论文分类

论文网 论文发表网 论文 免费论文网 找论文网 毕业论文 中国论文网 英语论文 百度论文 聘教网 易搜
 免费发布论文    中国论文网 2008版权所有  业务联系:pinjiao@126.com