Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 有数字分解的算法吗?_Java_Algorithm - Fatal编程技术网

Java 有数字分解的算法吗?

Java 有数字分解的算法吗?,java,algorithm,Java,Algorithm,最近我遇到了“两个简单的问题,可以在一个小时内解决”。我对竞争性编程不是很熟悉,所以这对我来说并不容易,我只想到了蛮力方法,所以现在我对我的解决方案是否有效以及是否有更好的解决方案感兴趣 问题是: 给定N(2位数或更多),求最小数,使其位数的乘积等于N。如果不可能,则返回0 我的java解决方案如下所示 int getNumber(int N) { int i = 25; while(i < Integer.MAX_VALUE) { if(digitsMul

最近我遇到了“两个简单的问题,可以在一个小时内解决”。我对竞争性编程不是很熟悉,所以这对我来说并不容易,我只想到了蛮力方法,所以现在我对我的解决方案是否有效以及是否有更好的解决方案感兴趣

问题是:

给定N(2位数或更多),求最小数,使其位数的乘积等于N。如果不可能,则返回0

我的java解决方案如下所示

int getNumber(int N) {
    int i = 25;
    while(i < Integer.MAX_VALUE) {
        if(digitsMult(i) == N)
            return i;
        i++;
    }
    return 0;
}
intgetnumber(intn){
int i=25;
while(i
如果你能检查一下第二个问题也会很好

给定N,返回X,这样

X>N,X-简单,X-回文

在这里,我也使用了暴力

int getPrimePalindrome(int N) {
    int i = N;
    while(i < Integer.MAX_VALUE) {
        if(isPalindrome(i))
            if(isPrime(i))
                return i;
        i++;
    }
    return 0;
}

boolean isPalindrome(int n) {
    String num = Integer.toString(n);
    String reverse = new StringBuffer(n).reverse().toString();
    return num.equals(reverse);
}

boolean isPrime(int n) {
    if(n == 2)
        return true;
    if(n % 2 == 0)
        return false;

    for(int i = 3; i*i <= n; i+=2)
        if(n % i == 0)
             return false;

    return true;
}
intgetprimepalindrome(intn){
int i=N;
while(i对于(int i=3;i*i这种问题在编写采访代码时非常常见。正如你所说,“暴力强迫”是唯一的方法,然而,我认为他们正在寻找的是聪明的优化

例如,您的
isPalindrome
可以更高效-您只需要检查前半部分是否与后半部分是否匹配,而不是检查全部


其次,您不希望每次都在内部循环中计算素数堆栈。我会将
isPrime
移动到外部
if
,这将允许您维护素数的完整列表,而不必每次都计算它。

“所以现在我对我的解决方案是否有效感兴趣”你测试过了吗?你有没有遇到什么问题?你不能用那种方式抛出你的问题和难题;一次只问一个清楚的问题time@NadimBaraky我问了一个问题,上面用粗体写着,非常大,上面写着“有没有数字分解的算法?”。其他问题是可选的。好的,我在上面的评论中无意冒犯;我想尝试帮助和提高我的知识。你接受的答案没有回答你所说的问题“有数字分解算法吗?”.也许这不是你的问题?谢谢你的回答。这确实是面试前的测试。以前从未做过,所以“聪明的优化”有点让我困惑,因为我认为优化意味着使用一些好的算法。现在我明白了它的真正含义。你能解释一下移动
isPrime
会有什么帮助吗?我明白,如果我需要重用这些代码,它会有帮助。就像是某种应用程序,我会在
main
中循环这样做我可以有素数的
ArrayList
。你的意思是这样的吗?如果你看你的isPrime impl,你要求它每次都计算n个素数。如果你把它作为主循环,那么就不需要这个recalc了。@falexandr因为回文数的密度逐渐小于素数,所以实际上需要对算法进行改进。例如,您可以枚举回文的前半部分,然后检查整个内容是否为素数。否则,假设X=98760000,您需要将近10^4个步骤才能到达第一个palindrome@Niklas你能举个有效的例子吗?