目标是制作两种方法: -
查找k prime的数字。
countKprime(int k,long a,long b)
k prime表示具有k个素数因子的数字。例如:4 - > 2(2和2)
找到使用三个数字(1prime 3prime 7prime)的所有方法来获取 给定的数字
puzzle(int s)
这就是我尝试这样做的方法: -
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得到了问题但我的代码花了太多时间。 我需要帮助来优化它,尤其是最后一部分。