如何使此代码更加优化?

时间:2017-03-25 08:01:51

标签: java optimization

目标是制作两种方法: -

  1. 查找k prime的数字。

    countKprime(int k,long a,long b)
    

    k prime表示具有k个素数因子的数字。例如:4 - > 2(2和2)

  2. 找到使用三个数字(1prime 3prime 7prime)的所有方法来获取 给定的数字

    puzzle(int s)
    
  3. 这就是我尝试这样做的方法: -

    import java.util.*;
    public class KPrimes {
    
    public static long[] countKprimes(int k, long start, long end) {
        ArrayList<Long> list=new ArrayList<Long>();     
        for(;start<=end;start++)
        {
            if(k==fact(start))
            {
                list.add(start);
            }
        }
        return toArray(list);
    }
    public static long[] toArray(ArrayList<Long> l)
    {
        long[] r=new long[l.size()];short x=0;
        for(long a:l)
        {
            r[x++]=a;
        }
        return r;
    }
    public static int fact(long x)
    {
        long p=nextprime(1);
        int n=0;
        do
        {
            while(x%p==0&&x!=0)
            {
                n++;
                x/=p;
            }
                p=nextprime(p);
        }
        while(x>1);
        return n;
    }
    public static long nextprime(long s) {
        s++;
        for(;;s++)
        {
            int f=0;
            if(s%2!=0||s==2)
            {
                int t=(int)Math.sqrt(s);
            for(int x=2;x<=t;x++)
            {
                if(s%x==0){f++;break;}
            }
            if(f==0){break;}
            }
        }
        return s;
    }
    public static int puzzle(int x)
    {
        long p1[]=countKprimes(1,0,x);
        long p3[]=countKprimes(3,0,x-p1[0]);
        long p7[]=countKprimes(7,0,x-p1[0]-p3[0]);
    
        int n=0;
    
        for(int a=0;a<p1.length;a++)
        {
            int x2=x;
            x2-=p1[a];
            for(int b=0;b<p3.length;b++)
            {
                x2-=p3[b];
                for(int c=0;c<p7.length;c++)
                {
                    if(p7[c]==x2)
                    {
                        n++;
                    }
                }
                x2+=p3[b];
            }
        }
        return n;
    }
    }
    

    我从CodeWars得到了问题但我的代码花了太多时间。 我需要帮助来优化它,尤其是最后一部分。

0 个答案:

没有答案