否数具有给定数字的至少一个共同数字的数字的除数

时间:2012-08-31 16:52:57

标签: java algorithm math numbers

正如问题所说。我需要计算给定数字的除数的数量,即x。但是约束条件是除数必须至少有一个与给定数字x相同的数字。

说10回答是2.(1,10,2,5是除数但只有1,10与10相同的数字)

3 个答案:

答案 0 :(得分:2)

我认为这应该有效:

private static boolean containCommonDigit(int n1, int n2) {
    for (char c : ("" + n1).toCharArray())
        if (("" + n2).contains("" + c))
            return true;
    return false;
}

public static int countSpecialDivisors(int n) {
    int count = 0;
    for (int i = 1 ; i <= n / 2 ; i++)
        if (n % i == 0 && containCommonDigit(n, i))
            count++;
    return count + 1;  // since we are looping to n/2
}

请注意,我们只是循环到n/2,因为我们知道n除了它本身之外没有超过其自身一半的除数,这就解释了为什么我们在末尾添加1(显然,{{ 1}}与自己共享至少一个共同数字。

请参阅有关进一步优化的意见的评论。

答案 1 :(得分:1)

1)你需要找到所有除数的数字,这可能很棘手 - 见http://en.wikipedia.org/wiki/Divisor_function

2)接下来,由数字和它的divisor给出 - 你需要提取所有数字,这很简单 - 只需得到除数的余数为10,然后继续得到小数部分。将数字放入Set

3)在集合上使用removeAll,如果设置已更改 - 则有常用数字

使用您找到的下一个除数重复步骤2/3。

答案 2 :(得分:0)

有一种非常简单的方法可以做到这一点。

 public String (int numberToBeFactored){
      String result = "1, ";

      for(int i = 2; i < numberToBeFactored){
           if (numberToBeFactored % i == 0){
               result = result + Integer.toString(i) + ", ";
           }
       }
       result.trim();
       return result; 

   }